How to write $upstream_trailer_{name} into access.log

Andrey Kopeyko andrey на kopeyko.ru
Вс Май 23 00:57:07 UTC 2021


Gena Makhomed писал 2021-05-23 01:50:
> On 23.05.2021 1:25, Andrey Kopeyko wrote:
> 
>> Добрый день, Геннадий!
> 
> Здравствуйте, Андрей!
> 
>>> Использую nginx/1.19.10 из официального репозитория nginx.org
>>> 
>>> На бэкенде в секции http прописал такие директивы:
>>> 
>>> add_trailer X-Response-Time $upstream_response_time always;
>>> add_trailer X-Cache-Status $upstream_cache_status always;
>>> 
>>> На фронтенде в секции http прописал proxy_http_version 1.1;
>>> Также на фронтенде в директиву log_format добавил переменные:
>>> 
>>> $upstream_trailer_x_response_time $upstream_trailer_x_cache_status
>>> 
>>> Ожидается что в лог будут записаны полученные значения этих 
>>> переменных,
>>> но вместо них в лог пишутся символы - - обозначающие пустые значения.
>>> 
>>> Почему так происходит?
>> 
>> Очевидно, потому что бэкенд _не_ возвращал вам заголовков 
>> "trailer-x-response-time: " - вы их сами выдумали.
> 
> trailer fields at the end of the message - это не заголовки.
> 
> Бэкенд эти trailers возвращает, я проверял переменные
> 
> $sent_trailer_x_response_time $sent_trailer_x_cache_status
> 
> на бэкенде они имеют не пустые значения и пишутся в лог бэкенда.

Стало понятнее.

Предположу, что в переменные $upstream_ они не попадают, т.к. передаются 
бэкендом _после_ тела ответа, а заголовки nginx ожидает увидеть _до_ 
тела.



-- 
Best regards,
Andrey A. Kopeyko <andrey at kopeyko.ru>


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