я думал, что обратный прокси должен быть простым, но столкнулся с проблемой. я пытаюсь выполнить следующее: пять 2 веб-интерфейсов (serverA, ServerB), на которых размещено веб-приложение contoso.local. затем у меня есть сервер, который является обратным прокси-сервером на iis (с ARR и URL Rewrite)
обратный прокси-сервер должен отправлять все входящие запросы contoso.local на serverA
если path123 находится в URL-адресе, он должен отправить запрос на serverB
мне нужно сохранить hostheader
поэтому я настроил следующее на обратном прокси:
включил прокси в ARR
установить savehostheader через
system.webServer/proxy"%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost
добавлен новый веб-сайт в iss, который имеет contoso.local в качестве заголовка хоста
добавлены 2 правила со следующей конфигурацией, описанной в web.config этого веб-сайта contoso.local:
<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>
теперь, если я проверю, я всегда попаду на serverA. я что-то упустил или что-то не так в моей логике?
ДаниэльВ