2015-09-11 102 views
1

我有一个ASP.Net网站下面的重写规则让IIS作为一个反向代理: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标题?

回答

2

Url重写可以在响应中重写标题,但不应默认执行此操作。由于这不是在网站的重写规则中配置的,因此很可能在服务器级别启用了应用程序请求路由模块。

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

有在此URL引用ARR模块窗口的一些截图:http://blogs.msdn.com/b/chiranth/archive/2014/08/03/application-request-routing-part-2-reverse-proxy-and-troubleshooting-arr-urlrewrite-issues.aspx

+0

正如你所看到的,我已经发布了我的问题的配置 - 没有传出重写规则,没办法改写响应标题已被检查。 – caesay

+0

应用程序请求路由选项我的意思是不涉及您的配置文件,并没有存储在那里。通常,当您使用url重写模块配置反向代理时,IIS会询问您是否要安装ARR。如果你同意,它会安装它,并检查“反向重写主机在响应标题”中为你。所以你甚至可能不知道你使用这个模块。 – Evk

+0

该模块甚至不在IIS中的网站级别,而是位于服务器级别。这篇文章有我的意思的屏幕截图 - http://blogs.msdn.com/b/chi/chi/archive/2014/08/03/application-request-routing-part-2-reverse-proxy-and-troubleshooting-arr -urlrewrite-issues.aspx – Evk