当使用负载均衡/反向代理时,如何获取正确的 Request.Url
ZKEASOFT July 18, 2017
当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就行。