【问题标题】:Avoid rewriting URL's to external applications with reverse proxy on IIS?避免在 IIS 上使用反向代理将 URL 重写到外部应用程序?
【发布时间】:2014-07-23 11:06:57
【问题描述】:

Confluence IIS 反向代理设置

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

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

我就是这样做的:

  • 已安装 URL Rewrite 2.0
  • 已安装应用程序请求路由 3.0
  • 设置反向代理规则:
    • 匹配 URL:使用正则表达式匹配模式 (.*)(忽略大小写)
    • 条件:(无)
    • 服务器变量:(无)
    • 操作:用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=...

有没有简单的方法来解决这个问题?

【问题讨论】:

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


    【解决方案1】:

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

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

    但是,这会导致页面无法在 Internet Explorer 11 L 中加载 页面已显示,但图表所在的空间为空白,它会尝试永远加载某些内容。

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

    【讨论】:

    • 我今天花了很多时间试图弄清楚为什么我的 cookie 被设置为错误的域,即使我已经在 web.config 部分中为 Cookies 和 Auth 明确指定了域。真是救命稻草。
    【解决方案2】:

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

    【讨论】:

    • 我在 IIS 中调用了appcmd 命令,但我不确定您对其余部分的意思。无法在 80 端口上配置目标站点,即 Confluence on Apache。
    • 知道了,我还以为是服务器上的另一个站点。这是一个有点不同的问题。我会尝试在奇数端口上发送它,看看效果如何——不确定 apache 是否会将端口塞入其中。另一种方法可能是在 IIS 中而不是 apache 中提升 java - 从我所听到的现代版本的 IIS 中效果很好。最后,您可以在端口 80 上的同一个机器上并排运行 IIS 和 apache,您只需要告诉 IIS 不要使用 0.0.0.0 并告诉它们使用特定的 IP 地址。
    • 好的,谢谢,我会调查的。我还使用 Fiddler 检查了发生了什么。根据我从 LucidChart 支持获得的信息,它似乎与重定向中的 Location 标头(302 响应)有关。明天我会仔细看看这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多