使用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。
发表评论
相关文章
国内AI资源汇总,AI聊天、AI绘画、AI写作、AI视频、AI设计、AI编程、AI音乐等,国内顺畅访问,无需科学上网。
扫码或点击进入:萤火AI大全
文章分类
最新评论