nginx正在删除标题Microsoft Edge

时间:2016-08-10 20:02:00

标签: nginx header microsoft-edge

在我的Ubuntu部署服务器上,只有当请求来自Microsoft Edge或Internet Explorer时,Nginx才会删除自定义请求标头(令牌)。来自Firefox,Chrome或Safari的请求工作正常。

我已经完成了一个tcpdump来检查传入请求之间的区别,并且请求看起来完全一样(只有User-Agent不同,这似乎正常)。所有浏览器都将令牌发送到nginx

因为我的标题包含下划线,所以我在nginx.conf中有

underscores_in_headers on;

我正在nginx的访问日志中记录标题,它显示所有浏览器,但IE。

Nginx使用gunicorn代理Python Flask应用程序。在Flask应用程序中,我立即记录传入的请求,如果浏览器是IE,则令牌消失。所以显然nginx在将它发送给gunicorn之前丢弃了标题。

任何可能导致此问题的建议。

1 个答案:

答案 0 :(得分:0)

TLDR:您是否使用WAF?也许将WAF作为服务?

我建议您调查整个基础架构/路由拓扑。您可能没有考虑到路径中的负载均衡器/事物。

在我的工作中,我们确实遇到了同样的问题,而您的帖子是互联网上唯一听起来像我们的问题的事情。我们最终找出了根本原因。

从DNS路由的角度来看,这是我们拓扑的简化版本:

newwebsite.company.com-> Web应用程序防火墙即服务(如果失败,则失败,无法打开)-> Nginx +(带有WAF插件)-> Kubernetes Nginx Ingress Controller->托管在其上的自定义Angular Javascript前端Nginx Pod
legacywebsite.company.com-> F5负载平衡器-> Windows IIS Web服务器。
(新网站的一部分使用了旧版网站的相同后端服务器,如果使用Chrome开发者工具,则会看到500个错误。

我们检查了IIS日志,发现带有下划线的标头已从客户端HTTP请求b4中剥离,它们将到达后端IIS服务器/我们发现必须向每个Nginx负载均衡器添加underscores_in_headers on;在路径上,并固定它! ...或者我们认为。事实证明,除Internet Explorer / Microsoft Edge之外,所有浏览器的问题均已解决。 (您的实际情况)

疯狂的事情是,如果您位于新站点的一个url路径上,该站点会将流量转发到旧站点的负载均衡器,那么您正在经历大量的负载均衡器。 (托管Angular Javascript前端的nginx pod会将您重定向到F5负载平衡器)。我们发现了消除过程的根本原因,从而以最少的测试就摆脱了路由中疯狂的负载均衡器。我编辑了newwebsite.company.com的主机文件,以绕过WAF即服务,并直接指向充当WAF的Nginx + LB,它开始工作,IE / Edge不再出现500个错误。

我们的理论是,我们的WAF即服务正在剥离带有下划线的HTTP标头(Win IIS Web服务器使用该标头),而他们只是针对Edge / IE剥离此HTTP标头。因此,我们获得了一张票,说明了可再现性的情况和方向。