添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

使用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 配置。