Najlepszy sposób na przekierowanie wszystkich HTTP na HTTPS w IIS

26

Chcemy, aby WSZYSTKIE witryny na naszym serwerze internetowym (IIS 10) wymuszały SSL (tj. Przekierowywały HTTP na HTTPS).

Obecnie „Wymagamy protokołu SSL” w każdej witrynie i konfigurujemy 403 errormoduł obsługi w celu wykonania 302 redirectadresu do https dla tej konkretnej witryny.

To działa świetnie. Ale dla każdej strony jest to uciążliwe, jest mnóstwo miejsca na ludzkie błędy.

Idealnie chciałabym ustawić na stałe 301 redirectna wszystko HTTP://*, abyHTTPS://*

Czy istnieje prosty sposób, aby to zrobić w IIS?

userSteve
źródło
Czy nie możesz napisać skryptu, który wprowadzi tę zmianę dla każdej witryny, co zmniejszy obciążenie administracyjne, a także pomoże uniknąć literówek i błędów?
Todd Wilcox
1
Tytuł jest niepoprawny. Myślę, że miał on na celu przeczytać „Najlepszy sposób przekierowania całego HTTP na HTTPS w IIS”
Mick
@ToddWilcox czy możesz podać przykład takiego skryptu?
userSteve
Nie używaj IIS

Odpowiedzi:

40

Moduł IIS URL Rewrite 2.1 dla IIS7 + może być twoim przyjacielem. Moduł można pobrać z IIS URL Rewrite . Używanie modułu URL Rewrite Module i URL Rewrite Module 2.0 Dokumentacja konfiguracyjna objaśnia sposób korzystania z modułu.

Po zainstalowaniu modułu możesz utworzyć przekierowanie dla całego hosta za pomocą Menedżera usług IIS. Wybierz przepisz adres URL , dodaj regułę ... i regułę pustą .

Nazwa:
Przekieruj do HTTPS

Dopasuj URL
Żądany adres URL: Matches the Pattern
Używanie: Wildcards
Wzór: *
Ignoruj ​​wielkość liter: Zaznaczone

Warunki
Logiczne grupowanie: Wprowadzanie Match Any
warunków : {HTTPS}
Sprawdź, czy ciąg wejściowy: Matches the Pattern
Wzór: OFF
Ignoruj ​​wielkość liter: Zaznaczone
Śledzenie grup przechwytywania w różnych warunkach: Nie zaznaczone

Zmienne serwera
Pozostaw puste.

Akcja
Typ akcji: Redirect
Przekieruj URL: https://{HTTP_HOST}{REQUEST_URI}
Dołącz ciąg zapytania: Niezaznaczony
Typ przekierowania: Permanent (301)

Zastosuj regułę i uruchom IISReset (lub kliknij Uruchom ponownie w Menedżerze IIS)

Alternatywnie po zainstalowaniu modułu możesz zmodyfikować plik applicationHost.config w następujący sposób:

<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
źródło
Czy to zadziała w przypadku stałych przekierowań 301?
userSteve
@ userSteve zgodnie z powyższą odpowiedzią, możesz wybrać typ przekierowania.
BE77Y
@ użytkownikSteve, ups, tak, powinieneś być w stanie zmienić typ przekierowania na 301 i uzyskać te same wyniki
sippybear
1
@sippybear jeszcze jedno pytanie - co oznacza input = "{HTTPS}"? Czy powinno to być {HTTP}, ponieważ będzie to wejście, a wyjście HTTP?
userSteve
3
{HTTPS} to zmienna, której dotyczy zapytanie, aby sprawdzić, czy połączenie jest zabezpieczone. Możesz przeczytać więcej na ten temat tutaj: docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/... W tym przypadku sprawdzamy, czy {HTTPS} jest wyłączony, a następnie przekierowujemy, czy to jest
sippybear
1

Moje badania pokazują, że może to być lepszy sposób na przekierowanie:

<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>
Upadły anioł
źródło
1
Czy możesz wyjaśnić, dlaczego tak jest lepiej?
userSteve
Przepraszam, nie potrafię tego wytłumaczyć, po prostu czytam w kilku miejscach, że składnia jest lepsza.
Fallen Angel
1
czy masz jakieś źródła?
dangel
1
Jest to dokładnie ta sama reguła, co w serverfault.com/a/893804/7184 , ale napisana przy użyciu wyrażeń regularnych i grupowania Dopasuj wszystko. Jedną zaletą może być to, że wyrażenie reguły korzysta z wartości domyślnych reguły i jest bardziej złożone.
bzlm
Korzystam z IIS 10 i wybrana odpowiedź nie działała dla mnie. Z jakiegoś powodu IIS nie rozpoznał składni jako prawidłowej reguły. Wkleiłem twój kod i zadziałał natychmiast, dziękuję za udostępnienie.
Jordan