在 2 个内部前端服务器上,具有相同主机头的 IIS 反向代理

在 2 个内部前端服务器上,具有相同主机头的 IIS 反向代理

我认为反向代理应该很简单,但我遇到了一个问题。我尝试完成以下操作:我有 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。我是否遗漏了什么或者我的逻辑是否存在错误?

相关内容