1.描述
问题
NGINX代理某个web服务时,单机情况下也出现不停的要求认证的情况
初步分析
去掉NGINX代理,直接访问服务,未出现上述情况;
进一步分析:
查看经过NGINX的请求和直接访问服务请求区别:
cookie中的部分带下划线’_'的认证信息丢失导致,因此出现重复要求认证。
2.解决办法
在NGINX,配置文件http {} 模块中添加如下配置:
underscores_in_headers on;
重启NGINX服务,再次访问服务正常。
3.官方解释
Syntax: underscores_in_headers on | off;
Default: underscores_in_headers off;
Context: http, server
Enables or disables the use of underscores in client request header fields. When
the use of underscores is disabled, request header fields whose names contain underscores
are marked as invalid and become subject to the ignore_invalid_headers directive.
由官方解释可以看出,默认情况下,underscores_in_headers为off,表示当客户端请求头中带有下划线的字段默认将会被标识为无效字段。
因此,如下两个建议:
- 尽量不要在请求头中添加带下划线的字段;
- 使用NGINX代理的时候,添加underscores_in_headers on的配置。