Nginx中设置$location_tag变量写入访问日志为空,求正确实现方法
正确实现Nginx Location标记并记录到访问日志的方法
你之前的方案无效,核心问题在于用空字符串作为源的map定义会把$location_tag锁定为空值,后续location里的set指令无法覆盖这个由map生成的变量。下面是两种可行的实现方式:
方法一:Server块默认值+Location覆盖
这种方式通过Server层设置默认值避免未初始化警告,再在目标Location内覆盖变量:
- 在Server块中定义默认值:
server { set $location_tag ""; # 其他Server配置 ... } - 在需要标记的Location内赋值:
location /x { set $location_tag "x"; # 该Location的其他配置 ... } - 日志配置保持原有写法:
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
相关产品推荐
相关产品推荐

