nginx и proxy_cache_lock

L
На сайте с 10.02.2015
Offline
247
1949

nginx 1.10.1 из репозитория nginx, CentOS 7.

Такой конфиг


// Стоят по очереди
proxy_pass http://bla-bla-bla$uri;
proxy_pass http://proxy_ts$uri;

proxy_next_upstream http_404;
proxy_next_upstream_tries 3;

proxy_cache proxy_cache_stream;
proxy_cache_valid 3m;
proxy_cache_valid any 10s;
proxy_cache_lock on;
proxy_cache_lock_timeout 650000000s;
proxy_cache_lock_age 10m;
proxy_cache_methods GET HEAD POST;

proxy_method GET;
proxy_hide_header "Set-Cookie";

proxy_ignore_headers "Set-Cookie" "X-Accel-Redirect" "X-Accel-Expires" "X-Accel-Limit-Rate" "X-Accel-Buffering";

Вопрос.

Почему несколько исходящих соединений, а не одно, хотя стоит proxy_cache_lock и proxy_cache_lock_timeout и proxy_cache_lock_age достаточно велики.

Поток - 0,8 МБит/с

До 19:00 исходящий поток был такой же, после вырастает до 7 МБит/с.

Но как только выросла нагрузка, вырос и исходящий поток?

Почему?

png 154233.png
Andreyka
На сайте с 19.02.2005
Offline
822
#1

Хотите урезать исход? Прикрутите iptables/tc.

Не стоит плодить сущности без необходимости
L
На сайте с 10.02.2015
Offline
247
#2
Andreyka:
Хотите урезать исход? Прикрутите iptables/tc.

Таким образом у меня будет 8 исходящих по 0,1 МБит/с.

А мне нужно 1 исходящее на 0,8 МБит/с

Что еще могу сказать:

Время кеширования достаточно. ИНтервал между первым и последним запросом к файлу - 1 мин.

Какие вижу варианты:

1. Сделать промежуточный прокси (с хранением кеша в том же месте, если это 1 физический сервер).

Но если к этому прокси будет стучаться несколько бекэндов, то тоже возможна ситуация с повторными запросами.

2. Отдавать через fastcgi_cache_lock + php

Блокировку запросов делать уже в php, если поступил второй такой запрос.

Только непонятно, что будет, если по повторному запросу отдать допустим 503 ответ.

Если бы у X-Accel-Redirect можно было задать время.

3. Отдавать через try_files + fastcgi_cache_lock + php

После скачивания ложить файл, куда нужно, и время fastcgi кеша пару секунд, чтобы не было дублирования.

Ложить файл через fastcgi_store или php.

Тоже непонятно, что будет, если по повторному запросу отдать допустим 503 ответ.

4. Отдавать через try_files + php

После скачивания ложить файл, куда нужно.

По повторному запросу отдаем заголовок 'Refresh: 3; url=http://'.$_SERVER['HTTP_HOST'].$uri

Браузер через 3 секунды придет, а файл уже будет.

(на данный момент такая схема используется в другом месте)

5. Посмотреть на встроенный в nginx lua | perl

6. Отправить багрепорт в nginx. :)

L
На сайте с 10.02.2015
Offline
247
#3

Заметил, что есть редкие обращения через 4-15 минут от первого посещения.

В основном из китайских IP.

Обращение в основном зафиксировано одно с IP и оно просроченное.

Ответ выкачивают не весь.

А так запросы, судя по логам, якобы закешированы. Только первый запрос не с кеша.

Установил кеш 15 мин.

По логам некешированный только первый запрос.

Но все равно левый трафик есть.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий