log_var_set
Устанавливает указанную переменную в заданное значение перед записью в журнал доступа.
Описание
Директива log_var_set позволяет присвоить значение переменной запроса непосредственно перед записью в журнал доступа. Эта возможность полезна, когда нужно включить в журналы конкретную динамическую информацию на основе условий, существующих в момент обработки запроса. Директива может принимать от двух до трёх аргументов: переменную для установки, присваиваемое значение и необязательное условие, указанное как if=condition. Значение может ссылаться на другие переменные запроса или ответа, что позволяет фиксировать широкий спектр HTTP-информации для целей логирования.
При обработке log_var_set проверяет указанное условие, если оно задано. Если условие оценивается как истинное, значение присваивается указанной переменной. Директива работает в различных контекстах, включая http, server и location, что обеспечивает гибкую область действия и возможность наследования или переопределения конфигураций по мере необходимости. Если для одной и той же переменной определено несколько директив log_var_set на разных уровнях, приоритет имеет директива, расположенная ближе по иерархии контекстов.
Этот модуль считается экспериментальным, и его поведение может измениться в будущих выпусках. Пользователям следует тщательно протестировать свои конфигурации, чтобы гарантировать достижение ожидаемого поведения логирования в зависимости от того, как устанавливаются переменные и как оцениваются условия при обработке запроса.
Пример конфига
http {
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$log_field1" "$log_field2"';
access_log /var/log/nginx/access.log;
server {
listen 80;
server_name localhost;
location / {
log_var_set $log_field1 $upstream_http_custom_header1;
log_var_set $log_field2 $upstream_http_custom_header2;
proxy_pass http://example.upstream.com;
}
}
}Не все значения переменных доступны на всех этапах обработки запроса; убедитесь, что переменная инициализирована и задана до логирования.
Будьте осторожны с синтаксисом условий; использование неверных условий может привести к непредвиденному поведению при логировании переменных.
Если переменная не установлена из-за условия, она не появится в логах, что может повлиять на анализ логов. Обязательно тщательно проверяйте условия.