Nginx过滤了Header中带有下划线的参数

createh51周前 (06-30)技术教程2

今天测试接口时发现本地请求正常,部署后死活都不行,在header中带有2个xxx_token和xxx_ip的参数在后端接收不到,在想是不是内容过长导致接收不到,打印了日志发现根本没有,说明根本没有到这一步,那就应该是出现在nginx上,网上搜了一下,确实是nginx为了避免和他自己的参数造成混淆,默认是过滤了header参数的下划线,导致后端接收不到。

其实,在herader命名中使用下划线其实是可以的也是符合 HTTP 标准的。Nginx之所以要默认禁止使用是因为 CGI 历史遗留问题。下划线会被映射为 CGI 系统变量名中的下划线,这样容易引起混淆。

所以要在nginx的配置文件中加入:

   #不过滤header中带有下划线参数
    underscores_in_headers on;

该选项默认是关闭的,所有包含下划线的字段名都会被丢弃,所以一般无特殊需要建议header参数不使用下划线。

相关文章

nginx请求头数据读取流程

本文我们则主要讲解nginx是如何读取客户端发送来的请求头的数据,并且解析这些数据的。本质上来讲,请求行的数据和请求头的数据读取流程是基本一致的,因为其都面临着如何从间断的数据流中读取到数据,也面临着...

Nginx系列:Nginx自带后端健康检查

严格说Nginx并没有自带针对负载均衡后端节点的健康检查功能,但是可以通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的相关指令...

Nginx 400错误怎么产生的,如何定位,如何解决?

nginx400错误如何产生的呢?遇到问题该如何定位呢?今天遇到一个比较难以解释的问题,上传一个大文件时(比如20M)接口请求日志已经在nginx的access.log中打印了,并且报400,但是ng...

如何限制 NGINX 中的连接数(请求数)- Part1

NGINX提供了各种模块,允许用户控制其网站、Web 应用程序以及其他 Web 资源的流量。限制流量或访问的关键原因之一是防止某些类型的滥用或攻击,例如DoS(拒绝服务)攻击。在NGINX中有三种主要...