使用nginx代理转发A项目的时候,调用nginx,发现A项目报错,header中参数丢失(过滤器拦截,有提示缺失的参数)
因为其他项目也是走的nginx代理转发,header中的参数并没有丢失的情况,然后对比下A项目和其他正常的项目的参数,发现A项目丢失的参数都是带有_下划线的参数名,如t_test。
猜测是nginx把header中带下划线的参数名过滤了
最终找到nginx的一个配置:
underscores_in_headers
,underscores就是下划线的意思,这个配置的意思就是说
是否支持header中带下划线的参数名,默认配置是off
。将其改为on即可,热部署配置文件后重新访问nginx,正常访问到A项目。配置位置在http里面,如下所示:
在日常开发和运维中,我们经常会遇到需要使用
Nginx
进行反向
代理
的场景。但在配置proxy_pass时,有时候可能会遇到请求
参数
丢失
的问题。在这篇文章中,我们将会详细探讨这个问题并给出几种解决方案。
nginx
代理
默认会把
header
中
参数
的 “”
下划线
去掉,所以后台服务器后就获取不到
带
""线的
参数
名
。需要在http配置里添加这个
参数
配置为on。以上示例中,
Nginx
会保留
名
为 “X-My
Header
” 的请求头
参数
,并将它的值设置为原请求头中
名
为 “x-my-
header
” 的
参数
的值。
配置这样且每次请求的主机域
名
和ip都为127.0.0.1,无法获取到实际请求的数据,
nginx
在
转发
的时候会自动将消息头中的 Host和X-Real-IP设置为本地的127.0.0....
确定当前的http请求是否正确,这里要用到HTTP Debugger Pro,自己下载并分析正确请求和错误请求之间的http头部信息和体部信息是否有问题;这些分析出来的原因是:http头里面的自定义头信息
丢失
了,
导致
接口缺少
参数
。在logtion配置节点,没有就加入,有则修改以下代码。2、没有问题,则说明是在
nginx
转发
现现的问题。1、有问题,那就是自己写请求的代码问题。在server配置节点,加入以下代码。在http配置节点,加入以下代码。修改完成后,重启
nginx
即可。
nginx
转发
报错问题/
nginx
转发
丢失
header
头部信息
场景是 我用
nginx
监听80端口 然后把域
名
转发
到8080端口
www.yuming.com > 80 > 8080
我用域
名
访问的时候后台会报错说我没有登录(我后台用的是shiro) , 但是我直接用ip访问就没有问题,本地也没有问题,意识到可能是
nginx
转发
的问题,网上查找资料得知
nginx
转发
时头部信息中如果有
下划线
会默认过滤掉,所以
导致
我的access_token被过滤了后台才会出现未登录情况
在
nginx
今天在线上切换系统时,发现后端微服务报错,说xx
header
的数值为空,也就是没有传。查看browser信息,发现前端页面系统发出时是
带
了这个
header
(user_id)的。也是就
header
user_id达到后端微服务时没有了。
那么代码没有改动,怎么平白无故会
丢失
头信息?
于是想到两个环境的不同之处在于线上是通过
nginx
做的
代理
转发
,会不会是
nginx
搞的鬼?于是搜索“
nginx
request
header
丢失
”,果不其然是这个问题,
nginx
对
下划线
的头信息做了限制,找到问题所在就.
当我访问blog.first-blood.cn的时候,proxy_pass
转发
到jonny023.github.io这个域
名
下去了,而jonny023.github.io/upload/hello.jpg这个文件我通过blog.first-blood.cn/upload/hello.jpg访问就出现404
此时在
nginx
的配置文件下的location配置下面添加一句
申请的申请头
参数
有
下划线
,而
Nginx
代理
默认会把
header
中
参数
有“_”
下划线
的
参数
去掉;重启
Nginx
即可。在下面的这个问题中,就是因为Cookies的
参数
里有两个
参数
是
带
有
下划线
的,因而每次申请
Nginx
都会把这两个
参数
当作有效
参数
去掉,
导致
每次申请都须要认证,因而就会报下面的谬误第一条。默认情况下,并不是所有
header
s的fields它都会
转发
,fields里
带
有
下划线
(_)的,
Nginx
视为不合法,自动抛弃不发了。例如:AUTHORIZATION_TOKEN。ingress 配置。