Welcome! Log In Create A New Profile

Advanced

Re: Пустая переменная $upstream status при 499

January 13, 2020 04:46AM
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, так как мы уже получили ответ и закрыли соединение с бекендом.

К сожалению, запросы с лагающим бекендом пока не удалось отловить в логах. Но, надеюсь они появятся в обозримом будущем и удастся что-то найти.
Subject Author Posted

Re: Пустая переменная $upstream status при 499

Maxim Dounin December 27, 2019 09:14AM

Re: Пустая переменная $upstream status при 499

yanda.a December 27, 2019 10:03AM

Re: Пустая переменная $upstream status при 499

yanda.a December 27, 2019 10:10AM

Re: Пустая переменная $upstream status при 499

Maxim Dounin December 27, 2019 12:04PM

Re: Пустая переменная $upstream status при 499

yanda.a December 30, 2019 03:21AM

Re: Пустая переменная $upstream status при 499

Maxim Dounin December 31, 2019 06:00AM

Re: Пустая переменная $upstream status при 499

yanda.a January 13, 2020 04:46AM

Re: Пустая переменная $upstream status при 499

Maxim Dounin January 13, 2020 07:34AM

Re: Пустая переменная $upstream status при 499

yanda.a January 13, 2020 08:12AM

Re: Пустая переменная $upstream status при 499

yanda.a January 13, 2020 08:14AM

Re: Пустая переменная $upstream status при 499

Maxim Dounin January 13, 2020 02:40PM

Re: Пустая переменная $upstream status при 499

yanda.a January 13, 2020 03:07PM

Re: Пустая переменная $upstream status при 499

Maxim Dounin January 14, 2020 07:48AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 114
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 500 on July 15, 2024
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready