Re: Необъяснимый 503 при limit_conn

Maxim Dounin mdounin на mdounin.ru
Вт Май 22 18:22:49 UTC 2018


Hello!

On Tue, May 22, 2018 at 07:45:35PM +0300, Иван wrote:

> Периодически nginx начинает отдавать 503 там где не должен. А именно.
> Есть следующая конфигурация limit_conn:
> 
> geo $binaddrnotownproxy {
>         default $binary_remote_addr;
>         51.ipv4/32 "";
>         2001:ipv6::/56 "";
>         10.ipv4/32 "";
> }
> 
> 
> limit_conn_zone $binaddrnotownproxy zone=dynamic:2000m;
> 
> 
> 2000m взял уже от безысходности, так как думал, что переполняется
> область памяти.
> 
> 
> Такая схема используется, чтоб исключить некоторые адреса из лимитирования.
> 
> 
> И есть обычный, проксирующий через proxy_pass локейшен, в котором задано
> 
> limit_conn dynamic 10;
> 
> Регулярно, хоть и достаточно редко в ответ на запросы в этот локейшен
> проскакивает 503 тогда, когда оно совсем возникать не должно. Например,
> вот следующий лог. В этот локейшен ходит заббикс (фактически curl). Он
> тоже иногда получает 503. Я вырезал из лога все запросы с его IP.

[...]

> > 2a01:IPv6|-|22/May/2018:07:15:25 +0300|GET /
> > HTTP/1.1|200|117907|-|Mozilla/5.0 (compatible; MSIE 10.0; Windows NT
> > 6.1; Trident/6.0)|0.095
> > 2a01:IPv6|-|22/May/2018:07:16:25 +0300|GET /
> > HTTP/1.1|503|608|-|Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1;
> > Trident/6.0)|0.000
> 
> Обращаю внимание, что идет серия быстрых запросов раз в минуту, на
> которые возвращается 200, а потом очереднй внезапно получает 503.
> Проясните, пожалуйста, кто-нибудь ситуацию. Debian Stretch, nginx из
> официальных репозиториев.

Для начала стоит убедится, что именно nginx вернул 503.  Потому 
как, скажем, Apache возвращает 503, если не может добраться до 
бэкенда, меж тем регулярно меняющийся размер ответа позволяет 
предположить, что ресурс, к которому ходит заббикс, не статический.  
Да и размер 608 не соответствует размеру стандартной 503-ей ошибки 
nginx'а.

Узнать можно, например, заглянув в error log - если ошибку вернул 
nginx, там будет ругань про "limiting connections by zone...", по 
умолчанию на уровне error.

Впрочем, даже если ответ от nginx'а - приведённый лог не даёт 
оснований считать, что limit_conn не должен был сработать.  
Запросы логгируются в access log в момент их завершения, так что 
смотреть надо в первую очередь на те запросы, которые логгируются 
после запроса, получившего в ответ 503, а не до него.

-- 
Maxim Dounin
http://mdounin.ru/


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