Re: Ограничение количества запросов
Ясно, большое спасибо за ответы, теперь ситуация прояснилась. 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: Ограничение количества запросов
Поправка: промежутков всё таки 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: Ограничение количества запросов
Спасибо за совет, но хотелось бы получить разъяснение именно по настройкам 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
Ограничение количества запросов
Поисковые боты часто дёргают сайты, чем создают большую нагрузку. Была предпринята попытка ограничить запросы к 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
Не работает условное логгирование
Задаю в секции 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: Не работает условное логгирование
Да, версия 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 ?
Есть 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 ?
С 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
Возникла надобность использовать 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
Да, забыл указать: версия 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