阅读 409

Nginx反向代理之巨坑underscores_in_headers

一、背景

因为项目需求,在做Windows的相关的事情;基本架构就是Nginx--> Nginx --> IIS,在Linux机器上通过Nginx做反向代理到Windows的IIS;然后遇到的问题直接使用IIS的IP访问是没有任何问题的;只要通过Nginx的反向代理总会有部分会报错;报错具体如下:

 

1)表面错误

Server Error, unsaved changes may have been lost, please reload the page before you continue.

 

2)浏览器检查报错

 

 

3)应用层的具体日志报错如下

复制代码

<error errorId= host= type= 
message= source= 
detail= 
user= = statusCode=>

复制代码

 

二、排查过程

1)直接使用IP行,加上Nginx的代理就是不行,说明肯定是Nginx的哪些配置有问题

2)通过浏览器的检查,发现直接返回错误就是400,Bad request;于是把网上所有关于400的可能给排除了,还是不行

3)因为对Windows的服务确实很少用,也没想着去看的应用日志;直到最后才想办法找到他的应用日志,发现了上面的问题

4)在Nginx的配置文件里加上underscores_in_headers on配置后,解决。

 

三、根本原因

请求的请求头参数有下划线,而Nginx代理默认会把header中参数有“_”下划线的参数去掉;解决这个问题只需要在Nginx的配置文件中添加:underscores_in_headers on;重启Nginx即可。在上面的这个问题中,就是因为Cookies的参数里有两个参数是带有下划线的,因此每次请求Nginx都会把这两个参数当作无效参数去掉,导致每次请求都需要认证,因此就会报上面的错误第一条。

 

 

四、总结

1)在做设计时就要考虑不要用下划线做请求头

2)作为SRE层面,排查一定要根据日志来,程序有问题一定是有证据的,不能只靠猜测;要去找到可靠的证据来验证自己的猜想。日志、日志、日志,重要的事情说三遍,绝对是你排查第一需要看的,自己就是因为思想上有一定的懒惰,没有直接第一时间去看应用日志,而是一直盯着浏览器返回的错误在排查导致排查时间过长。

3)排查问题从上到下,从下到上要适当的灵活变动;不能只停留在表层错误去排查问题,应用的日志是最能体现问题的。

 

五、学习交流

欢迎大家关注我的公众号,一起交流、学习。 

作者:李先生

出处:https://www.cnblogs.com/lemon-le/

服务器评测 http://www.cncsto.com/ 

服务器测评 http://www.cncsto.com/ 

站长资源 https://www.cscnn.com/ 

小鱼创业 https://www.237fa.com/ 


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐