【问题标题】:IIS reverse proxy interfering with redirect location headerIIS 反向代理干扰重定向位置标头
【发布时间】:2023-03-08 03:12:02
【问题描述】:

我在 ASP.Net 站点上有以下重写规则,以使 IIS 充当反向代理:

<rewrite>
    <rules>
        <rule name="AppReverseProxy" enabled="true" stopProcessing="true">
            <match url="([d|u|c]/.*)" />
            <action type="Rewrite" url="http://127.0.0.1:12949/{R:1}" />
        </rule>
    </rules>
</rewrite>

所以基本上,domain.com/u/* domain.com/d/*domain.com/c/* 路径上的任何内容都会被转发到本地服务器。这很好用,而且通常我到现在都没有问题。

我让本地服务器返回一个301 Permanent Redirect,其中一个Location 标头设置为一个子域,例如:subdomain.domain.com/somePath。这个子域指向一个完全不同的服务器。

问题在于 IIS 正在重写 Location 标头以看起来像 domain.com/somePath,它正在完全删除子域。我通过访问domain.com:12949 的站点确认这是一个IIS 问题,它正确地重定向到子域。如何阻止 IIS 从本地服务器重写 Location 标头?

【问题讨论】:

    标签: c# asp.net iis url-rewriting iis-7


    【解决方案1】:

    Url rewrite 可以重写响应中的标头,但默认情况下不应这样做。由于网站的重写规则中没有配置此项,因此很可能是在服务器级别启用了应用请求路由模块。

    在 IIS 管理器中,选择当前服务器(不是网站),打开Application Request Routing,在右侧栏中会有一个选项Server Proxy Settings。在那里你会看到“Reverse rewrite host in response headers”选项。如果选中 - 取消选中它,您的问题应该得到解决。

    在此 URL 有一些 ARR 模块窗口的屏幕截图供参考: https://docs.microsoft.com/en-gb/archive/blogs/chiranth/application-request-routing-part-2reverse-proxy-and-troubleshooting-arr-urlrewrite-issues

    【讨论】:

    • 如您所见,我已经在问题中发布了我的配置 - 没有传出重写规则,没有检查重写响应标头的选项。
    • 应用程序请求路由选项我的意思是与您的配置文件无关,也没有存储在那里。通常当您使用 url 重写模块配置反向代理时,IIS 会询问您是否要安装 ARR。如果您同意,它将安装它并在其中为您检查“Reverse rewrite host in response headers”。所以你甚至可能不知道你使用了这个模块。
    • 这个模块甚至不在 IIS 的网站级别,而是在服务器级别。这篇文章有我的意思的截图 - blogs.msdn.com/b/chiranth/archive/2014/08/03/…
    • 这是正确的,谢谢。我已将答案编辑得更清楚,并授予赏金。
    猜你喜欢
    • 2016-12-26
    • 2016-11-13
    • 1970-01-01
    • 2019-03-14
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    相关资源
    最近更新 更多