Лучший способ перенаправить все HTTP на HTTPS в IIS

26

Мы хотим, чтобы ВСЕ сайты на нашем веб-сервере (IIS 10) применяли SSL (т.е. перенаправляли HTTP на HTTPS).

В настоящее время мы «запрашиваем SSL» на каждом сайте и настраиваем 403 errorобработчик для выполнения 302 redirectадреса https для этого конкретного сайта.

Это прекрасно работает. Но это сложно сделать для каждого сайта, есть много места для человеческой ошибки.

В идеале я хотел бы создать постоянный 301 redirectна всех, HTTP://*чтобыHTTPS://*

Есть ли простой способ сделать это в IIS?

userSteve
источник
Разве вы не можете написать сценарий, чтобы сделать это изменение для каждого сайта, которое уменьшит административную нагрузку и поможет избежать опечаток и ошибок?
Тодд Уилкокс
1
Название неверно. Я думаю, что это было предназначено, чтобы прочитать "Лучший способ перенаправить весь HTTP к HTTPS в IIS"
Мик
@ToddWilcox можешь привести пример такого скрипта?
userSteve
Не используйте IIS

Ответы:

40

Модуль IIS URL Rewrite 2.1 для IIS7 + может быть вашим другом. Модуль можно загрузить с IIS URL Rewrite . Использование URL Rewrite Module и URL Rewrite Module 2.0 В справочнике по конфигурации объясняется, как использовать модуль.

После установки модуля вы можете создать перенаправление на весь хост, используя IIS Manager. Выберите URL Rewrite , Add Rule (s) ... и Blank rule .

Имя:
Перенаправление на HTTPS

Соответствие URL
Запрошенный URL: Matches the Pattern
Использование: Wildcards
Шаблон: *
Игнорировать регистр: Проверено

Условия
Логическая группировка: Match Any
Вход условия : {HTTPS}
Проверьте, является ли строка ввода: Matches the Pattern
Шаблон: OFF
Игнорировать регистр: Проверено
Отслеживать группы захвата по условиям: Не проверено

Переменные сервера
Оставьте пустыми.

Действие
Тип действия: Redirect
URL-адрес перенаправления: https://{HTTP_HOST}{REQUEST_URI}
Добавить строку запроса: не отмечено
Тип перенаправления: Permanent (301)

Примените правило и запустите IISReset (или нажмите «Перезагрузить» в диспетчере IIS).

Кроме того, после установки модуля вы можете изменить файл applicationHost.config следующим образом:

<system.webServer>
  <rewrite>
    <globalRules>
      <rule name="Redirect to HTTPS" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" ignoreCase="true" negate="false" />
        <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
          <add input="{HTTPS}" ignoreCase="true" matchType="Pattern" negate="false" pattern="OFF" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
      </rule>
    </globalRules>
  </rewrite>
</system.webServer>
sippybear
источник
Будет ли это работать для перенаправления 301?
userSteve
@userSteve согласно ответу выше, вы можете выбрать тип перенаправления.
BE77Y
@userSteve упс, да, вы должны иметь возможность изменить тип перенаправления на 301 и получить те же результаты
sippybear
1
@sippybear еще один вопрос - что означает input = "{HTTPS}"? Должно ли это быть {HTTP}, поскольку это будет вход, а HTTP - выход?
userSteve
3
{HTTPS} - это переменная, которую вы запрашиваете, чтобы узнать, защищено ли соединение. Вы можете прочитать больше об этом здесь: docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/… В этом случае мы проверяем, выключен ли {HTTPS}, и затем перенаправляем, если это
sippybear
1

Мои исследования показывают, что это может быть лучший способ для перенаправления:

<rewrite>
    <rules>
        <rule name="http to https" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTPS}" pattern="^OFF$" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
    </rules>
</rewrite>
Падший ангел
источник
1
Можете ли вы объяснить, почему это лучше?
userSteve
Прошу прощения, я не могу объяснить это сам, просто прочитал в нескольких местах, что синтаксис лучше.
Падший ангел
1
у тебя есть источники?
Дангель
1
Это точно такое же правило, что и на serverfault.com/a/893804/7184 , но оно написано с использованием регулярных выражений и соответствия всех групп. Одним из преимуществ может быть то, что выражение правила использует значения по умолчанию и является более кратким.
bzlm
Я на IIS 10, и выбранный ответ не работает для меня. По какой-то причине IIS не распознал синтаксис в качестве действительного правила. Я вставил ваш код, и он сразу заработал, спасибо, что поделились.
Иордания