Re: Ограничение количества запросов

2016-08-08 Пенетрантность nNgzlTtv3k5lzmKRvlmS22tSl8sJr68k
Ясно, большое спасибо за ответы, теперь ситуация прояснилась.

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,268830,268843#msg-268843

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Ограничение количества запросов

2016-08-08 Пенетрантность nNgzlTtv3k5lzmKRvlmS22tSl8sJr68k
Поправка: промежутков всё таки 6, но тем не менее.
Есть даже местами и по 8:

08/Aug/2016:14:17:53 +0300 200 site.com upstream_response_time=1.337
08/Aug/2016:14:17:53 +0300 200 site.com upstream_response_time=1.279
08/Aug/2016:14:17:53 +0300 200 site.com upstream_response_time=0.047
08/Aug/2016:14:17:53 +0300 200 site.com upstream_response_time=0.614
08/Aug/2016:14:17:53 +0300 200 site.com upstream_response_time=1.428
08/Aug/2016:14:17:53 +0300 200 site.com upstream_response_time=0.506
08/Aug/2016:14:17:53 +0300 200 site.com upstream_response_time=0.239
08/Aug/2016:14:17:53 +0300 200 site.com upstream_response_time=0.008

Или временная метка - это таки время выдачи ответа, т.е. из него нужно
вычитать upstream_response_time, чтоб получить время прихода запроса ?

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,268830,268840#msg-268840

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Ограничение количества запросов

2016-08-08 Пенетрантность nNgzlTtv3k5lzmKRvlmS22tSl8sJr68k
Спасибо за совет, но хотелось бы получить разъяснение именно по настройкам
nginx. Смысл вопроса - разобраться с нюансами работы nginx по ограничению
запросов.

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,268830,268834#msg-268834

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ограничение количества запросов

2016-08-08 Пенетрантность nNgzlTtv3k5lzmKRvlmS22tSl8sJr68k
Поисковые боты часто дёргают сайты, чем создают большую нагрузку. Была
предпринята попытка ограничить запросы к php-страницам.
Вот конфиг nginx:

http {
..

limit_req_zone $bot_key zone=php_bot:100m rate=5r/s;

log_format bot '$time_local $status $server_name ...'

server {
..

location ~* \.php$ {
..

set $bot_key "";
if ($http_user_agent ~* 
spider|bot|crawl|megaindex|yahoo){ set $bot_key
$server_name; }

limit_req zone=php_bot;
limit_req_status 503;
limit_req_log_level notice;

access_log /var/log/nginx/access-php-bot.log
bot
if=$bot_key;
}
}
}

Секций server { ... } несколько, они все идентичные.
В итоге после полного перезапуска nginx в логе видим:

08/Aug/2016:12:27:00 +0300 200 site.com ... upstream_response_time=0.119
08/Aug/2016:12:27:00 +0300 503 site.com
08/Aug/2016:12:27:00 +0300 503 site.com
08/Aug/2016:12:27:00 +0300 200 site.com ... upstream_response_time=0.117
08/Aug/2016:12:27:00 +0300 503 site.com
08/Aug/2016:12:27:00 +0300 200 site.com ... upstream_response_time=0.116
08/Aug/2016:12:27:00 +0300 200 site.com ... upstream_response_time=0.022

08/Aug/2016:12:27:01 +0300 200 site.com ... upstream_response_time=0.129
08/Aug/2016:12:27:01 +0300 503 site.com ...
08/Aug/2016:12:27:01 +0300 200 site.com ... upstream_response_time=0.074
08/Aug/2016:12:27:01 +0300 503 site.com ...
08/Aug/2016:12:27:01 +0300 200 site.com ... upstream_response_time=0.030
08/Aug/2016:12:27:01 +0300 503 site.com ...

За "01" секунду всего 3 успешно обработанных запроса, за предыдущую - 4,
несмотря на то, что ограничение допускает обработку 5 запросов.
Почему так, в чём ошибка ? Какая временная метка указывается в логе -
момента прихода запроса или момента выдачи ответа ?
Даже если временная метка - это момент выдачи ответа, то всё равно маловато
выходит: за каждую из секунд не пропустилось максимально допустимое
количество запросов.
Как корректно проверять правильно ли работает конфигурация nginx, понял ли
nginx то, что от него хотели ?

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,268830,268830#msg-268830

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Не работает условное логгирование

2015-04-20 Пенетрантность nNgzlTtv3k5lzmKRvlmS22tSl8sJr68k
Задаю в секции server{} следующее

set $do_log 0;
if ($status = 200){ set $do_log 1; }
access_log /var/log/nginx/code-200.log combined if=$do_log;

логгирование не работает, в лог вообще ничего не летит. Если использовать
другие переменные, не $status, работает. Это ошибка в nginx ?

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,258213,258213#msg-258213

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Не работает условное логгирование

2015-04-20 Пенетрантность nNgzlTtv3k5lzmKRvlmS22tSl8sJr68k
Да, версия nginx - 1.7.10

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,258213,258224#msg-258224

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Можно ли задать timeout для shutting down ?

2014-11-25 Пенетрантность nNgzlTtv3k5lzmKRvlmS22tSl8sJr68k
Есть nginx, который кушает много памяти. Когда делаем nginx -s reload,
старые процессы не умирают, а переходят в стостояние is shutting down,
продолжая потреблять память. На смену им запускаются новые worker-ы, которые
тоже отъедают память.
Процессы is shutting down продолжают висеть долго.
Следовательно каждый nginx -s reload приводит к быстрому исчерпанию
свободной памяти, запустил раза 2..3 и память кончилась.
Есть ли возможность ограничить время пребывания процессов в состоянии
завершения работы ?
Искал по всем директивам - не нашёл :-(

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,255094,255094#msg-255094

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Можно ли задать timeout для shutting down ?

2014-11-25 Пенетрантность nNgzlTtv3k5lzmKRvlmS22tSl8sJr68k
С SIGTERM понятно, но это ж лишнее движение, вряд ли все админы сервера
постоянно будут помнить, что после -s reload надо делать pkill -f 'is
shutting down'. Было бы на много проще, если б nginx имел такую опцию.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,255094,255117#msg-255117

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Не работает limit req

2014-07-11 Пенетрантность nNgzlTtv3k5lzmKRvlmS22tSl8sJr68k
Возникла надобность использовать limit_req, но столкнулся с неприятным
моментом работы ограничителя. В документации приводится пример:

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
location /search/ {
limit_req zone=one;
}
}

который (за отсутствием исчерпывающего описания) наталкивает на мысль, что
указанный limit_req будет ограничивать частоту прихода запросов GET
/search/, однако на практике это не так.
Счётчик, указанный директивой limit_req_zone, является глобальным для
$binary_remote_addr и накручивается независимо от запроса. Из-за этого если
в одну и ту же секунду от одного и того же IP пришёл какой-то запрос и
запрос GET /search/, последний будет отклонён - сработает limit_req, хотя он
был единственным search-ем за эту секунду.

Попробовал на опыте - действительно работает не так, как ожидалось:

http {
limit_req_zone $binary_remote_addr zone=limited:10m rate=1r/s;

server {
listen 80 default_server;
location / { return 404; }
location /123 {
root /tmp/zzz;
limit_req zone=limited nodelay;
}
}
}


bash$ touch /tmp/zzz/123

bash$ { curl -s -o /dev/null -D - localhost/123; curl -s -o /dev/null -D -
localhost/123; } | fgrep HTTP
HTTP/1.1 200 OK
HTTP/1.1 503 Service Temporarily Unavailable

bash$ { curl -s -o /dev/null -D - localhost/a; curl -s -o /dev/null -D -
localhost/123; } | fgrep HTTP
HTTP/1.1 404 Not Found
HTTP/1.1 503 Service Temporarily Unavailable


Вопрос: как задать ограничение для конкретных запросов ?
К примеру есть задача: все запросы вида ./$ (оканчивающиеся на /, за
исключением корня) ограничить до 60 запросов/мин для каждого IP. Можно ли с
помощью nginx это сделать ?
Ну и было бы не плохо акцентировать на этом моменте внимание в документации.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,251661,251661#msg-251661

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Не работает limit req

2014-07-11 Пенетрантность nNgzlTtv3k5lzmKRvlmS22tSl8sJr68k
Да, забыл указать: версия nginx - 1.6.0

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,251661,251662#msg-251662

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru