You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx中设置$location_tag变量写入访问日志为空,求正确实现方法

正确实现Nginx Location标记并记录到访问日志的方法

你之前的方案无效,核心问题在于用空字符串作为源的map定义会把$location_tag锁定为空值,后续location里的set指令无法覆盖这个由map生成的变量。下面是两种可行的实现方式:

方法一:Server块默认值+Location覆盖

这种方式通过Server层设置默认值避免未初始化警告,再在目标Location内覆盖变量:

  1. 在Server块中定义默认值:
    server {
        set $location_tag "";
        # 其他Server配置
        ...
    }
    
  2. 在需要标记的Location内赋值:
    location /x {
        set $location_tag "x";
        # 该Location的其他配置
        ...
    }
    
  3. 日志配置保持原有写法:
    log_format main ... "$location_tag" ...;
    

方法二:直接用Map匹配URI(更推荐)

这种方式无需在Location内写额外指令,直接通过URI匹配自动赋值,更符合Nginx的配置逻辑:

map $uri $location_tag {
    # 匹配以/x开头的请求
    ~^/x/  "x";
    # 匹配以/y开头的请求
    ~^/y/  "y";
    # 无匹配时默认空字符串
    default "";
}

日志配置直接使用$location_tag即可,不需要额外的set操作。

内容的提问来源于stack exchange,提问作者grvsd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:13:34