Nginx代理uWSGI部署的Flask应用无法传递header信息的配置咨询
问题解决方法
核心原因
你遇到的header丢失问题主要由2个默认配置导致:
- Nginx默认会丢弃名称中包含下划线的HTTP请求头,多数自定义鉴权头的命名会包含下划线/横线,被Nginx默认过滤
- 现有Nginx配置未显式开启完整透传请求头、请求体的规则
配置修改步骤
1. Nginx配置修正
替换原有location块配置,新增必要参数:
##################### 修正后的NGINX CONFIG ##################### # 允许请求头中存在下划线,需放在server块或当前location块内 underscores_in_headers on; location /customer/ { include uwsgi_params; uwsgi_pass unix:///var/www/html/cisco/cisco.sock; # 开启完整透传请求头、请求体(包含JSON格式请求数据) uwsgi_pass_request_headers on; uwsgi_pass_request_body on; # 显式传递通用头信息,可根据你实际使用的鉴权头名称调整 uwsgi_param Authorization $http_authorization; uwsgi_param Content-Type $content_type; uwsgi_param X-Requested-With $http_x_requested_with; # 允许指定的所有HTTP请求方法 limit_except GET POST PUT DELETE PATCH OPTIONS { deny all; } # 修正Flask获取请求协议、路径的逻辑,避免后续生成链接异常 uwsgi_param HTTPS $https if_not_empty; uwsgi_param HTTP_HOST $host; uwsgi_param SCRIPT_NAME /customer; }
注意:如果你使用自定义命名的鉴权头(例如
X-User-Token),只需新增对应透传规则即可,格式为uwsgi_param 实际头名称 $http_头名全小写且横线替换为下划线;,比如X-User-Token对应的变量为$http_x_user_token。
2. 配置生效验证
修改完成后执行命令检查Nginx语法正确性:nginx -t
返回success后执行重载命令生效:systemctl reload nginx
3. uWSGI配置优化(可选)
你当前的uWSGI配置同时开启了HTTP端口监听和Unix套接字监听,如果生产环境不需要直接暴露5000端口访问,可注释掉http = 0.0.0.0:5000这一行降低安全风险,其余配置无需调整。
内容的提问来源于stack exchange,提问作者Texia Plazaola
相关产品推荐
相关产品推荐

