如何在IIS 10中用ARR路由至专用Admin服务器并保留原请求域名
解决ARR代理后浏览器URL跳转到后端主机的问题
问题原因
当前规则使用Rewrite动作本身逻辑正确,但浏览器URL跳转到ADMINHOST,核心原因是后端ADMINHOST返回了包含自身域名的重定向响应(比如301/302状态码,Location头指向http://ADMINHOST/Admin),而ARR默认未对这类响应头做修改,导致浏览器执行跳转。
解决方案
1. 启用ARR反向代理的响应头重写功能
这是解决URL跳转的关键步骤,让ARR自动替换后端返回的Location头中的域名:
- 打开IIS管理器,选中服务器节点
- 双击
Application Request Routing Cache - 在右侧操作栏点击
Server Proxy Settings - 勾选以下选项:
Enable proxyRewrite HTTP response headersReverse rewrite host in response headers
- 点击
Apply保存设置
2. 调整URL重写规则
修改现有规则,确保主机头正确传递,同时兼容大小写匹配:
<rule name="Admin Area" enabled="true" patternSyntax="ECMAScript" stopProcessing="true"> <match url="^(admin(/.*)?)$|^(lib_npm/.+)$" ignoreCase="true" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{HTTP_HOST}" pattern="^admin\.wf\.local$" negate="true" /> </conditions> <action type="Rewrite" url="http://ADMINHOST/{R:0}" preserveHostHeader="true" /> </rule> <rule name="ARR_PCRWeb_loadbalance" enabled="true" patternSyntax="ECMAScript" stopProcessing="true"> <match url=".*" ignoreCase="false" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{PATH_INFO}" pattern="^(/admin(/.*)?)$|^(/lib_npm/.+)$" negate="true" /> </conditions> <action type="Rewrite" url="http://WebFarm/{R:0}" /> </rule>
ignoreCase="true":确保匹配/Admin和/admin等大小写变体preserveHostHeader="true":让后端ADMINHOST收到的Host头为www.PUBLICDOMAIN,避免后端生成包含自身域名的链接
3. 检查后端ADMINHOST配置
确认ADMINHOST的站点没有强制重定向到自身域名的规则(比如IIS的URL重写规则、站点绑定的主机头限制),避免后端主动返回带ADMINHOST的重定向。
内容的提问来源于stack exchange,提问作者user3931406
相关产品推荐
相关产品推荐

