2013-07-08 3 views
6

Мы используем nginx с сервером приложений в качестве бэкэнд.Nginx: ограничение количества одновременных подключений на каждый IP-адрес для бэкэнд

Нам нужно ограничить количество одновременных подключений на каждый IP-адрес. Для этой цели мы использовали директиву nginx limit_conn. Но во всех случаях это не работает. Если пользователь генерирует много соединений с одного IP-адреса и быстро закрывает их, то nginx передает этот запрос на бэкэнд, но поскольку клиентское соединение уже закрыто, это соединение не считается в limit_conn.

Можно ли ограничить количество одновременных подключений на один IP-адрес для сервера с nginx?

ответ

3

Вы можете установить

proxy_ignore_client_abort off; 

Определяет, следует соединение с сервером проксированного быть закрыт, если клиент закрывает соединение, не дожидаясь ответа.

из documentation

Еще одно предложение заключается в использовании limit_req ограничить скорость запроса.

+0

Команда Nginx dev предлагает использовать 'proxy_ignore_client_abort off' также. Он работает до сих пор. – Anton

0

Боюсь, что это средство недоступно для nginx из коробки. По Nginx FAQ

Многих пользователей просили Nginx реализовать функцию в нагрузке балансира, чтобы ограничить количество запросов на внутренний интерфейс (обычно один). Хотя поддержка этого планируется, стоит отметить, что спрос для этой функции коренятся в плохом поведении на части применения будучи проксируемым

Я видел некоторые 3-й модуль партий для этого nginx-limit-upstream, но я никогда не пробовал.