nginx正在删除标题Microsoft Edge

问题描述 投票:2回答:1

在我的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之前丢弃了标题。

什么可以导致这个的任何建议。

nginx header microsoft-edge
1个回答
0
投票

TLDR:你使用WAF吗?也许WAF即服务?

我建议您调查完整的基础架构/路由拓扑。路径中可能存在您未考虑的负载平衡器/事物。

我们确实在我的工作中碰到了同样的问题,你的帖子是互联网上唯一一个听起来像我们问题的东西。我们最终找出了根本原因。

以下是从DNS路由角度看我们拓扑的简化版本:

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

我们检查了IIS日志,发现带有下划线的标题被剥离了客户端HTTP请求b4他们到达后端IIS服务器/我们发现我们必须将underscores_in_headers on;添加到路径中的每个Nginx负载均衡器并修复它! ......左右我们想。事实证明,除了Internet Explorer / Microsoft Edge之外,每个浏览器都修复了该问题。 (你的具体情况)

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

我们的理论是,我们的WAF即服务正在剥离一个带有下划线(Win IIS Web服务器使用)的HTTP头,并且他们只剥离了Edge / IE的HTTP头。所以我们得到了一张票,向他们解释了可重现性的情况和方向。

© www.soinside.com 2019 - 2024. All rights reserved.