Nginx请求头丢失的问题解决

 更新时间:2024年12月10日 10:11:54   作者:HainesFreeman  
本文主要介绍了在使用Nginx进行请求转发时,遇到请求头参数丢失的问题,导致的原因可能是api_key_id和api_key_value这2个参数传递过程中丢失或则根本没传递,下面就来具体介绍一下

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请求头丢失内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论