$request_id

Переменная $request_id содержит уникальный идентификатор для каждого запроса, обрабатываемого NGINX. — NGINX Core (HTTP)

$request_id NGINX Core (HTTP)

Описание

Переменная $request_id предоставляет уникальный идентификатор для каждого входящего запроса на сервер NGINX. Этот идентификатор полезен для отслеживания запросов и ведения логов, особенно в распределённых системах или архитектурах микросервисов, где корреляция логов между несколькими сервисами помогает при отладке и мониторинге. По умолчанию, если запрос не содержит явного заголовка `X-Request-ID`, NGINX генерирует и присваивает UUID (Universally Unique Identifier) в качестве идентификатора запроса. Это означает, что каждый запрос, обрабатываемый NGINX, можно отслеживать независимо от того, указал ли клиент этот заголовок. Когда запрос достигает сервера NGINX, он может пройти несколько этапов обработки (например, аутентификация, правила доступа и т.д.), и значение $request_id остаётся неизменным на протяжении этих процессов. Важно включить эту переменную с помощью модуля `request_id`, который может отсутствовать в минимальных сборках NGINX. В случаях, когда вовлечены внешние системы или сервисы (например, API-шлюзы или балансировщики нагрузки), передача идентификатора запроса через заголовки запроса обеспечивает согласованное отслеживание на всём протяжении жизненного цикла запроса. Типичные значения $request_id имеют формат строк UUID, обеспечивая глобальную уникальность. Например, пример вывода может выглядеть как `3e4e989c-45c6-4de4-b7d6-2b4ebc4fc417`. Это делает идентификатор крайне полезным для поиска и корреляции записей логов, относящихся к одному и тому же запросу в разных компонентах или слоях системы.

Пример конфига

http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$_http_referer" "$_http_user_agent" "$request_id"';

daily_log { 
    access_log /var/log/nginx/access.log main;
    
    proxy_set_header X-Request-ID $request_id;
} 
}

Подсистема

http

Кэшируется

Да

Контексты

http, server, location

Убедитесь, что модуль request_id включён в вашей сборке NGINX, так как некоторые минимальные сборки могут его не содержать.

Эта переменная не будет доступна до этапа обработки запроса, на котором ей присваивается значение, поэтому использование её на ранних этапах (например, в server block) может привести к непредвиденным результатам.

Не все upstream services смогут поддерживать или записывать этот request ID в лог, если они явно не настроены.