Maxim Dounin Wrote:
-------------------------------------------------------
> Соединение с бекендом, какое бы оно ни было постоянное, 
> периодически закрывается.  Если это происходит в тот момент, когда 
> nginx послал в соединение запрос - с точки зрения nginx'а это 
> выглядит как ошибка.
> 
> Чтобы nginx имел возможность в такой ситуации перепослать запрос 
> ещё раз - стоит описать ещё один server в блоке upstream, можно 
> тот же самый.  Тогда вместо возврата 502 клиенту nginx пойдёт на 
> следующий сервер в соответствии с настройкой proxy_next_upstream, 
> и вернёт пользователю полученный ответ.

Похоже, что даже с одним server в блоке upstream уже происходит перепосылка
запроса, судя по нескольким ответам, сначала 502, потом 200 в логах в
$upstream_status, предположу, что такое поведение обеспечивается за счет
max_fails. То есть можно игнорировать эти ошибки или может как-то можно их
минимизировать, скажем, выставив keepalive_timeout на бэкенде больше, чем
что-либо на прокси (правда не знаю что)?

> Задержки в $upstream_connect_time - это скорее всего либо потери 
> пакетов, либо переполненная listen queue на бекенде (что на 
> Linux'е при настройках по умолчанию выглядит как потеря 
> SYN-пакета).

Вряд ли это переполненная очередь на бэкенде, там сейчас  backlog=65535 и
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535 и net.ipv4.ip_local_port_range = 16384
65535. Такие же задержки возникают и на уровне upstream_header_time,
например, upstream_header_time > 1, а upstream_connect_time=0.02. Бывает
вообще только upstream_response_time > 1, а все остальные = 0.02. Это и
странно, поскольку трафик и нагрузка на бэкенде небольшие.

Большое спасибо за ответы.

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,270342,270350#msg-270350

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить