ошибка "upstream prematurely closed connection" - обсудим ?

Илья Шипицин chipitsine на gmail.com
Вс Окт 13 09:18:30 UTC 2019


привет,

предыстория. видим ошибку в логах. вспоминаем концепцию, что с уровнем
error логируются ошибки на стороне сервера. считаем, что ошибка
действительно была. идем к клиенту - у клиента статус 200, ему хорошо, все,
что он хотел считать, он вычитал. повторяем несколько раз, в большинстве
случаев ситуация повторяется, в логах ошибка, у клиента все хорошо.

ок. идем смотреть исходники

вывод сообщения об ошибке встречается три раза

./nginx-1.17.4/src/http/ngx_http_upstream.c:
 "upstream prematurely closed connection");
./nginx-1.17.4/src/http/ngx_http_upstream.c:
   "upstream prematurely closed connection");
./nginx-1.17.4/src/http/ngx_http_upstream.c:
 "upstream prematurely closed connection");

в двух случаях запрос завершается статусом 502

ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);


в одном месте - не завершается:
http://hg.nginx.org/nginx/file/tip/src/http/ngx_http_upstream.c#l2369

собственно, recv в некоторых случаях может выдавать 0 и это не всегда
ошибка (у нас CentOS 7, возможно, там какая-то своя магия еще, с
какими-нибудь сетевыми штуками бекпортированными в ядро 3.10)

man recv
...
"The value 0 may also be returned if the requested number of bytes to
receive from a stream socket was 0."

собственно, в этом месте меняем текст. и, чудо, после этого залогированные
"upstream prematurely closed connection" идеально кореллируют с реальными
обрывами.

вопрос - в этом месте действительно стоит логировать ошибку с таким текстом
? может поменять уровень на info (или debug), а текст сделать что-то типа
"zero bytes read from recv" ?

Илья Шипицин
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20191013/d2656997/attachment.htm>


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