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

Nginx反向代理下,如何在uWSGI日志中添加HTTP请求头?

解决Nginx反向代理下uWSGI日志记录请求头的问题

我来帮你理清这个问题的核心逻辑,以及具体的解决步骤:

首先得明确:uWSGI的%(var.XXX)日志变量,只能读取Nginx通过uwsgi_param指令主动传递的参数,而你用proxy_set_header(如果是uWSGI场景,其实更推荐用uwsgi_set_header)设置的请求头,是直接修改转发给uWSGI的HTTP请求报文头,这些头不会自动进入uWSGI的var.*命名空间,所以没法直接用%(var.XXX)调用。

具体解决方案

要把你需要的请求头写入uWSGI日志,只需要在Nginx配置里,把目标请求头通过uwsgi_param同步传递给uWSGI即可:

  1. 修改Nginx的location配置
    假设你想记录X-Forwarded-For和自定义的X-User-ID请求头,在对应uwsgi_pass的location块里添加:

    # 把客户端真实IP头传递给uWSGI
    uwsgi_param HTTP_X_FORWARDED_FOR $http_x_forwarded_for;
    # 把自定义用户ID头传递给uWSGI
    uwsgi_param HTTP_X_USER_ID $http_x_user_id;
    

    这里的$http_x_forwarded_for是Nginx内置变量,对应请求头里的X-Forwarded-For(Nginx会自动把连字符转成下划线并小写)。

  2. 修改uWSGI的日志格式配置
    在uWSGI的ini配置文件里,更新log-format参数,加入你刚才传递的变量:

    log-format = [%(ltime)] %(remote_addr) %(method) %(uri) %(status) | X-Forwarded-For: %(var.HTTP_X_FORWARDED_FOR) | User-ID: %(var.HTTP_X_USER_ID)
    

额外说明

  • 如果你是用proxy_pass配合uWSGI(不推荐,更适合用uwsgi_pass),proxy_set_header设置的头同样需要通过uwsgi_param再传递一次,才能被uWSGI的var.*变量读取。
  • uWSGI 1.9.21+版本才支持%(var.XXX)语法,确保你的uWSGI版本符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:35:18