当Web应用程序部署在反向代理或者负载均衡时使用Request.Url并不能取得正确的用户访问的URL地址,域名会变成内部地址。

原因

我们来看一下负载均衡是如何工作的

  • 用户输入地址,如:www.zkea.net
  • 请求被发送到了负载均衡上
  • 负载均衡得到请求,随机或者根据配置将该请求转发到内部的URL地址,如: server1.local.com,或者是 IP 地址
  • 最后Web程序如:server1.local.com 返回响应

通常情况,Url属性是通过Web服务器的信息,请求的地址来生成的,这个在对于URL直接指向到Web服务器的情况下是正确的。但是在这种负载均衡的情况下会取到内部的地址,这显然不是我们要的。

解决方案

解决方案很简单,在web.config中添加一项appSettings就可以。

该属性叫aspnet:UseHostHeaderForRequestUrl,默认值是false,设成true就行。

MSDN相关

https://msdn.microsoft.com/en-us/library/hh975440.aspx