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

Maxim Dounin mdounin на mdounin.ru
Пн Июл 25 17:40:17 UTC 2011


Hello!

On Mon, Jul 25, 2011 at 11:14:00AM -0400, xganet wrote:

> Не работает  limit_conn при f5 сервер падает
> Bad Gateway 502 , пример конфига:

Директива limit_conn позволяет ограничить количество одновременно 
соединений с выполняющимися в них запросами, e.g. запретить 
скачивание большого количества файлов одновременно.  При нажатии в 
браузере кнопки F5 - соединение будет приблизительно одно, т.е.  
limit_conn'у делать будет нечего.

А вот во что у вас превратится бекенд от подобной нагрузки - 
вопрос отдельный, и судя по всему он у вас превращается в тыкву.  
Что в общем-то не удивительно - запрос получен, бекенд пошёл 
работать, и обычно код на бекенде даже не пытается узнать, было ли 
соединение закрыто.

Можно пытаться использовать proxy_ignore_client_abort (в этом 
случае nginx будет ждать ответа бекенда даже если клиент закрыл 
соединение, и limit_conn будет лучше отражать реальность с точки 
зрения бекенда).  Но правильнее и эффективнее защищаться от F5 с 
помощью limit_req.

> http {
>         limit_zone   one  $binary_remote_addr  10m;
>         ...
>         server {
>              ...    
>            limit_conn   one  25;
> 
>             location /download/ {
>              ...   
>             }
> 
> 
> limit_req_zone работает, от f5 спасает, но от
> флуда не спасает, 1000-2000 коннектов с
> одного ip проходят и сервер в аут ((

Совмещайте.  limit_req для защиты бекендов от нагрузки, limit_conn 
для защиты от любителей качать много одновременно, accept-фильтры 
и/или firewall - для защиты от атак типа slowloris.

Ну и про правильную настройку системы и nginx'а забывать не стоит.  
Работать с worker_connections 1024 - можно, но не нужно; nginx без 
проблем держит десятки тысяч соединений на одной машине, 
достаточно его об этом попросить и систему соответствующим образом 
настроить (читай: лимиты на количество файлов/сокетов поднять).

Maxim Dounin



Подробная информация о списке рассылки nginx-ru