我认为反向代理应该很简单,但我遇到了一个问题。我尝试完成以下操作:我有 2 个 Web 前端(服务器 A、服务器 B),它们托管一个 Web 应用程序 contoso.local。然后我有一台在 iis 上作为反向代理的服务器(带有 ARR 和 URL 重写)
反向代理应将所有来自 contoso.local 的传入请求发送到 serverA
如果 URL 中包含 path123,则应将请求发送到 serverB
我需要保留主机头
因此我在反向代理上配置了以下内容:
在 ARR 中启用代理
设置preservehostheader通过
system.webServer/proxy"%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost
在 iss 中添加了一个新网站,其主机头为 contoso.local
在该网站 contoso.local 的 web.config 中添加了 2 条规则,其配置如下:
<rewrite> <outboundRules> <preConditions> <preCondition name="ResponseIsHtml1"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" /> </preCondition> </preConditions> </outboundRules> <rules> <clear /> <rule name="ReverseProxyInboundRule2" stopProcessing="true"> <match url="^path123(.*)" /> <conditions> <add input="{CACHE_URL}" pattern="^(https?)://" /> </conditions> <action type="Rewrite" url="{C:1}://serverB/{R:1}" /> </rule> <rule name="ReverseProxyInboundRule1" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{CACHE_URL}" pattern="^(https?)://" /> </conditions> <action type="Rewrite" url="{C:1}://serverA/{R:1}" /> </rule> </rules> </rewrite>
现在如果我测试,我将始终进入服务器 A。我是否遗漏了什么或者我的逻辑是否存在错误?