IIS Url重写覆盖外部URL

时间:2017-07-20 08:23:16

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

在我的开发机器上,我正在尝试将IIS配置为反向代理,以将端口443中的请求转发到本地运行的nodejs应用程序。 请求转发正常,但有时nodejs应用程序尝试将浏览器重定向到外部站点,IIS url重写模块也会更改为指向本地服务器。

我使用https://localhost/test进入网站 IIS将请求重新路由到节点应用http://localhost:14819/test
节点应用程序返回一个http 302,其位置标题设置为https://example.com/someroute
IIS将其转换为https://localhost/someroute

我希望IIS不会触及外部网址。这该怎么做? 这是我的Web.config内容

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />                
                <rule name="ReverseProxyInboundRule1" patternSyntax="ECMAScript" stopProcessing="true">
                    <match url="^test(.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{HTTP_HOST}" pattern="^localhost" />
                    </conditions>
                    <action type="Rewrite" url="http://localhost:14819/test{R:1}" logRewrittenUrl="true" />
                </rule>
            </rules>            
        </rewrite>        
    </system.webServer>
</configuration>

1 个答案:

答案 0 :(得分:3)

  

如果您从后端代理返回任何重定向,那么您可以   不希望重定向Location头,你可以通过   取消选中&#34;在响应标头中反转重写主机&#34;在申请中   请求路由

  • 在IIS管理器中选择服务器节点
  • 转到“应用程序请求路由缓存”
  • 单击“服务器代理设置”
  • 取消检查&#34;在响应标头中反转重写主机&#34;