Windows Server mit dem IIS ist ein ausgezeichneter reverse Proxy und eigentlich auch schnell eingerichtet.
Diese Anleitung geht davon aus das …
- Es einen installierten Windows Server 2019 gibt
- Ein passendes SSL-Zertifikat mit korrektem CN existiert
- Wenn der Webserver im Internet erreichbar ist, tut es natürlich auch Let’s Encrypt
- Ein Webserver der über diesen reverse Proxy erreichbar sein soll existiert und auch wirklich von diesem Server erreichbar ist
IIS mit passenden Features installieren
Server Manager > Rollen und Features hinzufügen > „Rollenbasierte oder featurebasierte Installation“ > Server auswählen > „Webserver (IIS)“ und die gewünschten Funktionen hinzufügen. Obligatorisch ist die „IIS-Verwaltungskonsole“
Oder (als Minimalinstallation) an der PowerShell:
Install-WindowsFeature -name Web-Server –IncludeManagementTools
IIS ARR 3.0 (Application Request Routing) installieren
ARR 3.0 (mit URLRewrite) herunterladen und installieren: https://www.iis.net/downloads/microsoft/application-request-routing
Zertifikat im Windows Zertifikatsspeicher installieren
Doppeklick auf das *.pfx > Lokaler Computer > Weiter > Speicher automatisch auswählen / Kennwort eingeben > Weiter > Fertigstellen
IIS Proxy Dienste einschalten
„Internetinformationsdienste (IIS)-Manager“ (IIS-Konsole) öffnen > Links erster Punkt „Servername“ > Rechte Hälfte „Applicatin Request Routing Cache“ öffnen
In der Taskpane unter „Proxy“ > „Server Proxy Settings“ > Enable Proxy. Ganz unten sollte „Enable SSL Offloading“ eingeschaltet sein.
Tipp: Der X-Forwarded-For Header ist für viele Anwendungen (vor allem Java-Apps) wichtig. Der IIS verbietet im ARR standardmäßig aber alle Header, für die es keine Serverweite Erlaubnis gibt. Wie man eigene Header, zum Beispiel X-Forward-For, im IIS zulässt steht in diesem Artikel: https://www.ugg.li/iis-reverse-proyxy-http-header-setzen-zeigt-nur-fehler-500-seiten/ Wir raten dazu, den Header für Reverse Proxies zu erlauben.
IIS Site anlegen
Es ist zwar zwingend nötig eine neue Site anzulegen, wir raten aber als „best Practice“ dazu, für jede Bindung eine eigene Site mit eigener Konfiguration anzulegen. Die Default Site (ID #1) wird nämlich gerne von Drittsoftware verwendet oder verändert.
„Internetinformationsdienste (IIS)-Manager“ (IIS-Konsole) öffnen > Servername > Sites > Website hinzufügen
- Sitename: <www.example.com> (Anzeigename)
- Physischer Pfad: <c:\inetpub\www.example.com> (Pfad zur Konfiguration, exklusiv für jede Site anlegen)
- Typ: https
- IP-Adresse: „Keine zugewiesen“
- Hostname: <www.example.com> (URL, muss zum CN im Zertifikat passen)
IIS Site zum Reverse Proxy umstellen
„Internetinformationsdienste (IIS)-Manager“ (IIS-Konsole) öffnen > Servername > Sites > <www.example.com> > „URL Rewrite“ > Regeln hinzufügen > „Reverseproxy“ > Ziel eingeben (hier im Beispiel ein Webserver auf dem localhost auf Port 8080
Optional: HTTPS Redirect Regel erstellen
Um HTTP-Anfragen nun automatisch auf HTTPS weiterzuleiten (via HTTP 30x), kann man nun eine weitere Regel zur Site hinzufügen.
„Internetinformationsdienste (IIS)-Manager“ (IIS-Konsole) öffnen > Servername > Sites > <www.example.com> > „URL Rewrite“ > Regeln hinzufügen > Leere Regel
- Name: HTTPS-Redirect
- Übereinstimmung mit URL
- Angeforderte URL: „Entspricht dem Muster“
- Unter verwendung von: „Reguläre Ausdrücke“
- Muster:
(.*)
- Groß-/Kleinschreibung ignorieren
- Bedingungen > Hinzufügen
- Bedingungseingabe:
{HTTPS}
- Überprüfen, ob die Eingabezeichenfolge: „Entspricht dem Muster“
- Muster:
^OFF$
- Groß-/Kleinschreibung ignorieren
- Bedingungseingabe:
- Aktionen
- Aktionstyp: Umleiten
- Aktionseigenschaften > „URL Umleiten“:
https://{HTTP_HOST}/{REQUEST_URI}
- Abfragezeichenfolge anhängen
- Umleitungstyp: Dauerhaft
- … ✔ Übernehmen
fyi: über den Powershell Befehl wird zumindestens unter W2k22 erstmal nicht das benötigte „HTTP-Umleitung“ mit installiert, falls man an dem Punkt hängen bleiben sollte 🙂