IIS 反向代理干扰重定向位置 header

IIS reverse proxy interfering with redirect location header

我在一个 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/* 路径中的任何内容都将被转发到本地服务器。这工作正常,通常我到现在为止没有遇到任何问题。

我将本地服务器 return 和 Location header 的 301 Permanent Redirect 设置为子域,例如:subdomain.domain.com/somePath。这个子域指向一个完全不同的服务器。

问题是 IIS 正在重写 Location header 使其看起来像 domain.com/somePath,它正在完全删除子域。我通过访问位于 domain.com:12949 的站点确认它是一个 IIS 问题,并且它正确地重定向到子域。如何从本地服务器的 re-writing 和 Location header 停止 IIS?

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

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

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