Hello! On Sun, Jul 07, 2013 at 01:43:34PM -0400, Antohat wrote:
> Уважаемые разработчики! > > Мы используем на сайте ограничение на количество одновременных соединений с > одного IP со следующим конфигом: > > limit_conn_zone $binary_remote_addr zone=addr:64m; > limit_conn addr 20; > limit_conn_log_level warn; > > Все работало отлично, но некоторое время назад мы с удивлением обнаружили, > что бекенд обрабатывает более 500 запросов с одного IP. > В результате анализа выяснилось, что какой-то смышленный малый создает > большое количество соединений и сразу же их рвет. В результате nginx > успевает передать запрос на бекенд, но т.к. пользователь сразу же рвет > соединение и создает новые, то ограничение на количество запросов не > срабатывает. > > Я понимаю, что с точки зрения nginx тут все чисто, т.к. он считает только > открытые соединения со стороны клиента, но если подумать, то limit_conn все > таки используется администраторами как средство ограничения кол-ва > одновременных запросов на бекенд, т.к. большое кол-во запросов на к самому > Nginx совсем не проблема. > > Не могли бы вы реализовать ограничение количества одновременных запросов с > одного IP на бекенд, т.к. текущий функционал limit_conn тут не помогает? С точки зрения nginx'а - никаких запросов уже нет вообще, т.к. вслед за закрытием соединения клиентом - он закрывает соединение с бекендом и полностью завершает обработку запроса. Если у вас бекенд не достаточно умный, чтобы понять, что с закрытым соединением уже ничего делать не нужно - то можно включить proxy_ignore_client_abort: http://nginx.org/r/proxy_ignore_client_abort В этом случае nginx будет дожидаться, чтобы бекенд доработал, и только после этого завершать обработку запроса (и соответственно уменьшать счётчик активных соединений). -- Maxim Dounin http://nginx.org/en/donation.html _______________________________________________ nginx-ru mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-ru
