避免使用IIS上的反向代理将URL重写到外部应用程序?

时间:2014-07-23 11:06:58

标签: iis url-rewriting iis-7.5 confluence url-rewrite-module

Confluence IIS反向代理设置

我已根据互联网上的说明在IIS 7.5上为Atlassian Confluence设置了反向代理。

我想在同一台服务器上将所有流量重定向到“docs.unimaze.com”到“localhost:8090”。

我就这样做了:

  • 已安装的网址重写2.0
  • 已安装的应用程序请求路由3.0
  • 设置反向代理规则:
    • 匹配网址:使用正则表达式匹配模式(.*)(忽略大小写)
    • 条件:(无)
    • 服务器变量:(无)
    • 操作:使用http://localhost:8090/{R:1}重写(追加查询字符串并停止处理后续规则。

为了使一切工作(来自https://serverfault.com/questions/76013/iis6-vs-iis7-and-iis7-5-handling-urls-with-plus-sign-in-base-not-querystr),我必须做的唯一另一件事是在服务器上运行此命令,以便允许URL中带有“加号”的URL。

%windir%\system32\inetsrv\appcmd set config "WebSiteName" -section:system.webServer/security/requestFiltering -allowDoubleEscaping:true

外部重定向问题

Confluence本身似乎在尝试从外部应用程序编辑模块时完美地工作(LucidChart Diagrams失败),因为重写到外部应用程序也被重写,例如,尝试重定向到此URL:

http://docs.unimaze.com/documents/edit/4b157fd9-8e28-4d70-8587-0fdd0839fbca?callback=...

当重定向实际上应该是外部应用程序时,它应该保持不受重写规则的影响:

https://www.lucidchart.com/documents/edit/4b157fd9-8e28-4d70-8587-0fdd0839fbca?callback=...

有一种简单的方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

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

在UI中,应取消选中与服务器节点上的IIS中的“应用程序请求路由”上的此操作相对应的设置(选择“服务器代理设置”)。

但是,这会导致无法在Internet Explorer 11 L中加载页面 页面显示,但是图表所在的空白区域,它会尝试永久加载。

在Firefox和Chrome中,它运行正常。 我不知道它为什么在IE 11中“冻结”。将从其他机器检查是否总是发生这种情况。

答案 1 :(得分:0)

处理此问题的最简单方法是利用IIS主机标头并使代理网站认为它响应为www.example.com:80而不是localhost:8080。事实证明,AAR反向代理具有相当于Apache的ProxyPerserveHost设置,它在UI中没有很好地记录,也没有公开。

要启用此设置,您需要打开一个提升的shell并运行:

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true

然后将目标站点配置为使用适当的主机头侦听127.0.0.1:80,然后将代理配置为使用请求代理回localhost,它应该排队。