今天发现生产环境自定义透传字段 头部转发IP
, 错误.
观察了下 获取IP 方式并没有问题. 开发环境ok 的. 区别在于开发环境是直连的, 而生产是 Nginx Proxy
server {
listen 8080;
server_name localhost;
access_log /data/log/nginx/asset-access.log main;
error_log /data/log/nginx/asset-error.log error;
location / {
set $mode "test";
if ($request_uri ~* xxxx=([0-9a-z]+)) {
set $mode $1;
}
proxy_pass http://swoole_assets;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
upstream swoole_assets{
server 10.0.0.1:5001;
server 10.0.0.2:1001;
hash $mode;
}
上面的配置 本身并没有问题.
问题在于 header name
的字符做了限制,默认 underscores_in_headers
为 off
,表示如果header name
中包含下划线,则忽略掉。
恰好我自定义的 header
中都是用的下划线。
处理办法:
1、配置中 http
部分 增加 underscores_in_headers on
; 配置
2、用减号 -
替代下划线符号 _
,避免这种变态问题。nginx
默认忽略掉下划线可能有些原因。
可以加到 http
或者 server
中
语法:underscores_in_headers on|off
默认值:off
使用字段:http
, server
是否允许在 header
的字段中带下划线。
文章中提到查询配置问题, 可以提高Nginx
log
等级, 调整到debug
模式.
后来我在 nginx.conf
把 error
的日志等级更改为 debug
,查看 error_log logs/error.log debug
;
解决问题文章 :