log_var_set

Устанавливает указанную переменную в заданное значение перед записью в журнал доступа.

Синтаксисlog_var_set $variable value [if=condition];
По умолчаниюnone
Контекстhttp, server, location
Аргументы2-3

Описание

Директива 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;
        }
    }
}

Не все значения переменных доступны на всех этапах обработки запроса; убедитесь, что переменная инициализирована и задана до логирования.

Будьте осторожны с синтаксисом условий; использование неверных условий может привести к непредвиденному поведению при логировании переменных.

Если переменная не установлена из-за условия, она не появится в логах, что может повлиять на анализ логов. Обязательно тщательно проверяйте условия.

← Ко всем директивам