У меня было правило перезаписи URL в web.config одного из сайтов на нашем сервере. Но мы реализуем ферму серверов с сайтами на одном физическом сервере, чтобы обеспечить развертывание с «горячей заменой», как описано. Вот.
я нашел эта ссылка, который кажется, что он должен работать, поскольку он сначала перенаправляет, поэтому он не должен попадать в правило перезаписи ... затем, когда запрос возвращается как запрос HTTPS, поэтому первое правило будет обойдено, перезапись фермы должна получить выполнить. Но я боюсь ERR_TOO_MANY_REDIRECTS
ошибка.
Я пробовал переместить правило перезаписи из web.config в applicationHost.conf
, та же ошибка.
Что мне не хватает?
Второй вопрос: будет ли web.config иметь приоритет перед правилами applicationHost.config?
Правило перезаписи Web.congif:
<rewrite>
<rules>
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
</rule>
</rules>
</rewrite>
Правило перезаписи applicationHost.config:
<rule name="Route https test to server farm" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="test.com" />
<add input="{SERVER_PORT}" pattern="443" />
<add input="{HTTPS}" pattern="ON" />
<add input="{SERVER_PORT}" pattern="^(800.*)$" negate="true" />
</conditions>
<action type="Rewrite" url="http://test-farm/{R:0}" />
</rule>
Затем переместил правило web.config в applicationHost.config
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="test.com" />
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
</rule>
<rule name="Route https test.com to server farm" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="test.com" />
<add input="{SERVER_PORT}" pattern="443" />
<add input="{HTTPS}" pattern="ON" />
<add input="{SERVER_PORT}" pattern="^(800.*)$" negate="true" />
</conditions>
<action type="Rewrite" url="http://test-farm/{R:0}" />
</rule>
</globalRules>
Правила привязки сайта:
<site name="test-Prod-A" id="11" serverAutoStart="true">
<application path="/" applicationPool="test-Prod-A">
<virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot\test-Prod-A\website" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:8001:" />
<binding protocol="https" bindingInformation="*:8002:" />
</bindings>
</site>
<site name="test-Prod-B" id="12" serverAutoStart="true">
<application path="/" applicationPool="test-Prod-B">
<virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot\test-Prod-B\website" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:8003:" />
<binding protocol="https" bindingInformation="*:8004:" />
</bindings>
</site>
<site name="test-Prod-Farm" id="13">
<application path="/">
<virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot" />
</application>
<bindings>
<binding protocol="https" bindingInformation="*:443:test.com" sslFlags="1" />
<binding protocol="http" bindingInformation="*:80:test.com" />
</bindings>
</site>
Наручники фермы:
<webFarms>
<webFarm name="test-farm" enabled="true">
<server address="test-a" enabled="true">
<applicationRequestRouting httpPort="8001" httpsPort="8002" />
</server>
<server address="test-b" enabled="true">
<applicationRequestRouting httpPort="8003" httpsPort="8004" />
</server>
</webFarm>
</webFarms>