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

Nginx自定义日志格式:如何优先使用上游自定义响应头值,缺失时回退默认状态码

Nginx自定义日志格式:如何优先使用上游自定义响应头值,缺失时回退默认状态码

嘿,这个需求其实用Nginx原生的变量默认值语法就能轻松搞定,完全不需要额外的复杂配置!

你想要的「优先用上游自定义头X-Real-Status的值,没有的话就用Nginx自身的$status状态码」,直接在日志格式里用变量默认值表达式就能实现:

log_format new_req_format '$uri $request_method ${upstream_http_x_real_status:-$status} $request_time $http_host $upstream_response_time';

解释一下这个语法:

  • ${variable:-default_value} 是Nginx的标准语法:如果variable变量存在且非空,就用它的值;如果变量为空(比如上游没返回X-Real-Status头),就自动替换成后面的default_value。
  • 这里我们把default_value设为$status,刚好满足你的需求:上游有自定义头时用头的值,上游挂了(比如504网关超时)或者没返回这个头时,就用Nginx返回的实际状态码。

举个实际场景的例子:

  1. 当上游正常返回X-Real-Status: 200时,日志里会输出这个自定义状态值;
  2. 当上游宕机,Nginx返回504 Bad Gateway时,因为上游没返回X-Real-Status,日志就会自动用$status的504来填充。

如果之后你需要更复杂的状态判断逻辑(比如针对不同场景设置不同默认值),可以考虑用map指令提前定义一个$real_status变量,但就你当前的需求来说,上面的日志格式写法已经足够简洁好用了!

备注:内容来源于stack exchange,提问作者sadegh mohebbi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 08:39:33