波斯马BOSSMA Information Technology

IIS反向代理时后端服务器获取原始Host的方法

发布时间:2018年8月2日 / 分类:SERVER / 8,953 次浏览 / 评论

使用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。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《IIS反向代理时后端服务器获取原始Host的方法

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

发表评论