使用IIS做反向代理时,后端服务器不能直接获取到用户请求的原始主机名(域名),这需要一些配置。这里介绍两种方法:

1、更改反向代理的配置

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost

在命令提示符中执行上边的语句,意思是反向代理时保留主机头。

然后就可以通过服务器变量HTTP_HOST获取,C#中可使用 Request.Url.Host获取。

 

2、添加服务器变量

这个稍微复杂点。

首先需要在IIS站点上注册一个服务器变量:HTTP_X_ORIGINAL_HOST(名字可以随便取,HTTP开头的会进入到HTTP Header中)。

然后在提供反向代理功能的站点下添加“URL重写”入站规则,这里直接给出web.config中的配置:

    <rewrite>
      <rules>
                <rule name="ORIGINAL_HOST">
                    <match url=".*" />
                    <serverVariables>
                        <set name="HTTP_X_ORIGINAL_HOST" value="{HTTP_HOST}" />
                    </serverVariables>
                    <action type="None" />
                </rule>
...
</rules>
</rewrite>

 

这里就是匹配所有的url,添加一个服务器变量。

注意这段配置要放在rules的最前面,防止其它配置把它忽略。

现在就可以通过服务器变量HTTP_X_ORIGINAL_HOST获取了,也可以从HTTP Header中获取X_ORIGINAL_HOST。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注