Maxim Dounin Wrote:
-------------------------------------------------------
> Hello!
>
> On Mon, Dec 30, 2019 at 03:22:01AM -0500, yanda.a wrote:
>
> > Добрался до конфигурации, скину почти полную конфигурацию:
>
> [...]
>
> Смысла в "почти полной" конфигурации не очень много. Нужна
> конфигурация, с которой воспроизводится то, на что вы жалуетесь.
>
> Попробуйте воспроизвести проблемное поведение в песочнице, с
> использованием минимальной конфигурации. Скорее всего в процессе
> станет понятно, в чём именно проблема.
>
> --
> Maxim Dounin
> http://mdounin.ru/
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
Думаю, что смысла в конфигурации в принципе нет, если я все понял верно. Дело в том, что на текущей конфигурации мне никак не удалось воспроизвести это поведение в тестовом окружении. От безысходности пришлось включить дебаг и искать сообщения из логов в исходниках.
Например, вот что есть в логах:
2020/01/13 02:28:13 [info] 17855#17855: *29319057 client prematurely closed connection while sending to client, client: 176.59.97.91 ....
2020/01/13 02:28:13 [debug] 17855#17855: *29319057 http finalize request: 499, "/api/epg?from=1578862800&to=1578949199" a:1, c:1
И вот как это выглядит в логах:
request_time: 1.6400000000000001
bytes_sent: 0
status: 499
upstream_addr: ['backend-01-1']
upstream_status: [200]
upstream_response_time: [1.225]
То есть, мы получили ответ от бекенда, но не смогли по какой-то причине отдать клиенту (это уже другая история). Но, соединение с бекендом мы уже закрыли! А теперь смотрим исходники:
if (!u->cacheable && u->peer.connection) {
ngx_log_error(NGX_LOG_INFO, ev->log, err,
"client prematurely closed connection, "
"so upstream connection is closed too");
ngx_http_upstream_finalize_request(r, u,
NGX_HTTP_CLIENT_CLOSED_REQUEST);
return;
}
ngx_log_error(NGX_LOG_INFO, ev->log, err,
"client prematurely closed connection");
if (u->peer.connection == NULL) {
ngx_http_upstream_finalize_request(r, u,
NGX_HTTP_CLIENT_CLOSED_REQUEST);
}
У нас peer.connection == NULL, так как мы уже получили ответ и закрыли соединение с бекендом.
К сожалению, запросы с лагающим бекендом пока не удалось отловить в логах. Но, надеюсь они появятся в обозримом будущем и удастся что-то найти.