Re: limit conn счетчик переполнение

Maxim Dounin mdounin at mdounin.ru
Fri Apr 17 17:05:34 UTC 2015


Hello!

On Fri, Apr 17, 2015 at 12:28:03PM -0400, dwow wrote:

> Maxim Dounin Wrote:
> -------------------------------------------------------
> > Если limit_conn в других location'ах не включён, то для 
> > ограничения всех соединений в конкретном location'е - достаточно 
> > любого константного значения.
> 
> Если не используется в др. локейшенах, то можно сделать вот так:
> limit_conn_zone "service" zone=perservice:10m;
> location /services/post/ {
>    limit_conn perservice 1;
>    proxy_pass bakcend;
> }
> 
> и будет работать?

Да.  В старых версиях (до nginx 1.7.6), возможно, потребуется 
какая-нибудь константная переменная (например, $nginx_version), а 
не просто строка.

> > Если send_timeout случится - то да.  Если же вдруг какой-то клиент 
> > очерь медленно качает что-то большое - то процесс может занять 
> > бесконечное время.
> и как от таких избавляться? 

В общем случае - никак, это обычные клиенты, которые просто 
получают ответ.  Собственно, как раз одно из преимуществ nginx'а 
состоит в том, что он умеет таких клиентов эффективно 
обслуживать, тратя на это минимум ресурсов.  Ну и ограничивать с 
помощью директивы limit_conn, не давая захватить слишком много 
ресурсов сервера.

В вашем случае - проблема в том, что вы пытаетесь limit_conn 
применить не по назначению, и такое использование приводит к тому, 
что один медленный пользователь может легко заблокировать доступ 
всем остальным.

-- 
Maxim Dounin
http://nginx.org/



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