首页 文章

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

提问于
浏览
3

Confluence IIS反向代理设置

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

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

我就这样做了:

  • 已安装的URL重写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 's with 2496378 in the 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

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

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

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

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

  • 3

    处理此问题的最简单方法是利用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,它应该排队 .

相关问题