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

yanda.a nginx-forum на forum.nginx.org
Пн Янв 13 09:46:22 UTC 2020


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

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

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



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