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即可:
修改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会自动把连字符转成下划线并小写)。修改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
相关产品推荐
相关产品推荐

