Назад | Перейти на главную страницу

IIS 10 - перенаправление HTTP на HTTPS, затем перенаправление на ферму серверов (ARR) - слишком много перенаправлений

У меня было правило перезаписи 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>