Nginx请求头丢失的问题解决
1.问题
新增的几个 header 参数是这样的:
- api_key_id
- api_key_value
我配置有2层nginx转发,从机器A到机器B再到目标服务,遇到一个接口请求需要在header中传递api_key_id和api_key_value这2个参数,但是在EC2机器上直接curl目标服务的api url是可以的,运行的命令:
curl -k -v -X GET 'https://676eea277d90484b8142-cn-heyuan-acdr-1-vpc.alicloudapi.com/v1/accounts/1248622328516666' --header 'api_key_id: 111923335' --header 'api_key_value: f540033e6cc8429f801dc2734ad261ea'
但是通过从机器A到机器B再到目标服务这个链路却不行,这个链路的命令:
curl -k -v -X GET https://baidu.net/dev/tlpssp/uesrapi/v1/accounts/1248622328517708 -H "api_key_id:111923335" -H "api_key_value:f540033e6cc8429f801dc2734ad261ea"
总是返回401,检查了配置location都没有问题,但是目标服务后端打印出来的参数,是没有api_key_id和api_key_value这2个参数的。
猜测:
api_key_id和api_key_value这2个参数传递过程中丢失或则根本没传递
2.解决
于是各种google发现,是nginx配置的问题,终于找到了一个 Nginx 的配置参数:underscores_in_headers,这个参数默认值为:off,即默认忽略带下划线的 header。
最终解决方案:
1、在 http 或者 server 配置中把 underscores_in_headers 配置参数开关打开:
server { ... underscores_in_headers on; ... }
增加配置后,然后重启 Nginx。
2、使用破折号(-)代替下划线(_),或者统一规范直接不要使用下划线;
一般所见的 headers 确实也都是中杠线,没有下划线。
本文最终选择的是方案1,也就是增加配置: underscores_in_headers on;
到此这篇关于Nginx请求头丢失的问题解决的文章就介绍到这了,更多相关Nginx请求头丢失内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
nginx+tomcat实现Windows系统下的负载均衡搭建教程
下面小编就为大家分享一篇nginx+tomcat实现Windows系统下的负载均衡搭建教程,具有很好的参考价值,希望对大家有所帮助2017-12-12Nginx could not build the server_names_hash 错误的解决办法
这篇文章主要介绍了Nginx could not build the server_names_hash 错误的解决办法,需要的朋友可以参考下2014-03-03Nginx 获取客户端真实IP $remote_addr与X-Forwarded-For的实现
我们大多数情况下访问服务时,客户端并不是直接访问到服务器的,本文主要介绍了Nginx 获取客户端真实IP $remote_addr与X-Forwarded-For的实现,具有一定的参考价值,感兴趣的可以了解一下2024-03-03
最新评论