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 会检查指定的条件(如果提供)。如果条件被求值为真,则该值会被赋予指定变量。该指令可在多个上下文中运行,包括 httpserverlocation,从而提供灵活的作用域并能够根据需要继承或覆盖配置。如果在不同层级为同一变量定义了多个 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;
        }
    }
}

并非在请求处理的所有阶段都能获取到变量的值;在记录日志之前,请确保该变量已被初始化并设置。

注意条件语法;使用不正确的条件可能会导致在记录变量时出现意外行为。

如果变量由于某个条件未被设置,则不会出现在日志中,这会影响日志分析。请务必彻底验证这些条件。

← 返回所有指令