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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值