具有重写功能的 IIS 反向代理无法处理来自我们代理到的服务器的重定向

Posted

技术标签:

【中文标题】具有重写功能的 IIS 反向代理无法处理来自我们代理到的服务器的重定向【英文标题】:IIS reverse proxy with rewrites can't handle a redirect from the server we proxy to 【发布时间】:2011-05-13 17:43:19 【问题描述】:

我们拥有服务器 A,有时我们会在服务器 B 上重写对合作伙伴的请求。

在某些情况下,服务器 B 将响应重定向到一个完全不同的网站,这是预期的,假设服务器 C。但是,当该重定向表单服务器 B 返回到服务器 A 时,服务器 A 将其解释为重定向到自身 (A) 上的某个位置,而不是重定向到其他网站 - 服务器 C。

如何记录到外部网站的重定向并实际转到那里,而不是假设重定向在我的服务器上(和 404ing)?我们正在运行带有重写模块的 IIS 7。

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

转到 ARR 代理设置(它们隐藏在 IIS -> 应用程序请求路由缓存 -> 服务器代理设置下)并取消选中“在响应标头中反向重写主机”复选框。应该够了。

【讨论】:

非常感谢如此!我整天都在寻找解决方案。 鉴于该设置未存储在站点的 Web.config 中,我将如何通过代码对其进行调整,因为在我的情况下,我托管在 Azure 中,因此无法部署此设置更改? 我似乎在 IIS 管理器中的任何地方都找不到这个。此设置会隐藏在哪里? @Dylan 在 IIS 中查找:在 Connections(左)窗口中,选择您的服务器,然后您应该会在中心窗口的 IIS 下看到 Application Request Routing Cache。打开它,然后在右侧窗口中,您将看到服务器代理设置。这适用于 IIS 6。 发布这个问题的人真的应该接受这个作为答案。这救了我。干杯【参考方案2】:

如果您无法在 GUI 中更改此设置,您可以通过命令行设置配置。

这样的事情应该可以工作:

appcmd.exe set config -section:system.webServer/proxy /reverseRewriteHostInResponseHeaders:"False" -commit:apphost

【讨论】:

IIS 10 似乎没有任何 GUI 替代方案。所以这个就派上用场了【参考方案3】:

“在响应标头中反向重写主机”复选框对我来说位于不同的位置。我正在使用 Windows Server 2012 R2。

它位于连接 -> 服务器场 -> -> 代理下,就在超时设置下方。

就我而言,检查这解决了我的问题。

【讨论】:

以上是关于具有重写功能的 IIS 反向代理无法处理来自我们代理到的服务器的重定向的主要内容,如果未能解决你的问题,请参考以下文章

在iis上反向代理隐藏部分URI

所有站点的“/api/”文件夹的 IIS 反向代理/全局 URL 重写

CORS 使用带有 ARR 和 URL 重写的 IIS 作为反向代理

IIS 反向代理到 ApacheTomcat

IIS-反向代理

Nginx之反向代理日志格式集群缓存压缩URl 重写,读写分离配置