Re: limit conn счетчик переполнение
Maxim Dounin
mdounin at mdounin.ru
Fri Apr 17 14:53:18 UTC 2015
Hello!
On Fri, Apr 17, 2015 at 09:15:21AM -0400, dwow wrote:
> Maxim Dounin Wrote:
> -------------------------------------------------------
>
> > Just a side note: не надо делать так, вместо этого правильно
> > написать отдельный location, в котором и задать ограничение.
>
> вот это я не понял.
>
> у меня так
> location /services/post/ {
> limit_conn perservice 1;
> proxy_pass bakcend;
> }
Тогда зачем у вас используется perl_set?
Если limit_conn в других location'ах не включён, то для
ограничения всех соединений в конкретном location'е - достаточно
любого константного значения.
> > Скорее всего проблема в том, что limit_conn органичивает не
> > соединения на бекенду, а активные соединения. Соответственно,
> > если кто-то сходил на бекенд, получил оттуда достаточно большой
> > ответ и неспеша забирает его у nginx'а - ограничение будет
> > продолжать срабатывать. Например, если клиент сделал запрос
> > (ответ на который не помещается в буфер сокета), после чего пропал
> > и на пакеты не отвечает - ограничение будет срабатывать, пока не
> > случится send_timeout.
>
> Ага, и тогда через send_timeout (default: 60s), счетчик должен
> декрементироваться и следующий запрос пойти на бекенд, так? Но этого не
> происходит(
Если send_timeout случится - то да. Если же вдруг какой-то клиент
очерь медленно качает что-то большое - то процесс может занять
бесконечное время.
Ну и да, безусловно имеет смысл заглянуть в error log, и убедится,
что рабочие процессы не завершаются аварийно.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru