Sie haben also einen IIS-Webserver eingerichtet und sind wahrscheinlich auf das altbekannte Problem gestoßen: Alle Ihre Websites möchten auf Port 80 oder 443 laufen, aber IIS erlaubt nur eine Website pro Port, es sei denn, Sie finden einen cleveren Trick. Ich kenne das – mehrere Websites auf einer einzigen IP-Adresse oder einem einzigen Port zu hosten, kann wirklich mühsam sein, besonders wenn man nicht gewohnt ist, sich mit Bindungen, DNS oder SSL-Konfigurationen herumzuschlagen. Die gute Nachricht: Es gibt Möglichkeiten, das Ganze zum Laufen zu bringen, ohne sich die Haare zu raufen. Diese Anleitung soll Ihnen helfen zu verstehen, wie Sie mehrere Websites auf einem Server betreiben können, sei es mithilfe von Hostheadern, verschiedenen IP-Adressen oder der Verwaltung von Bindungen mit PowerShell. Sie ist zwar nicht besonders elegant, aber sie funktioniert – und das ist doch die Hauptsache, oder?
Wie man mehrere Websites auf IIS mithilfe von Bindungen und Hostheadern hostet
Ausführen mehrerer IIS-Websites auf demselben Port mit Host-Headern
Angenommen, Sie betreiben bereits eine IIS-Website auf Port 443 (durch die Installation von SSL-Zertifikaten auf IIS ), dann ist das Hosten einer zweiten Website auf genau demselben Port nicht ganz einfach. IIS akzeptiert nicht zwei Websites auf Port 443, es sei denn, Sie geben jeder Website ihren zugehörigen Hostnamen an. Hier kommen Hostheader oder SNI ins Spiel.
- Warum das hilft: Es ermöglicht IIS, mehrere Websites auf derselben IP-Adresse und demselben Port durch die Verwendung unterschiedlicher Hostnamen zu unterscheiden, ähnlich wie beim virtuellen Hosting auf Apache oder Nginx.
- Wenn dies zutrifft: Sie erhalten die Fehlermeldung „Port wird bereits verwendet“, wenn Sie versuchen, die zweite Website auf Port 443 zu starten.
- Was Sie erwarten können: Nach dem Hinzufügen eines Host-Headers (z. B.testsite.contoso.com ) und der Aktivierung von SNI, falls SSL involviert ist, sollte Ihre Website anhand des Hostnamens korrekt geladen werden, obwohl beide auf Port 443 laufen.
Um eine neue Website auf Port 443 mit einem anderen Hostnamen hinzuzufügen, öffnen Sie den IIS-Manager ( inetmgr ) und navigieren Sie zu den Websitebindungen. Klicken Sie bei Ihrer neuen Website auf „Bindungen bearbeiten“, wählen Sie „https“, legen Sie den Port auf 443 fest, wählen Sie Ihr SSL-Zertifikat aus und geben Sie unter „Hostname “ Ihren neuen Hostnamen ein (z. B.testsite.contoso.com ).Vergessen Sie nicht, das Kontrollkästchen „ Server Name Indication erforderlich“ zu aktivieren, wenn Sie eine IP-Adresse für mehrere SSL-Websites verwenden.
Diese Einstellungen werden im Hintergrund in der applicationHost.configDatei unter gespeichert C:\Windows\System32\inetsrv\config\applicationHost.config. Bearbeiten Sie diese Datei jedoch nicht direkt, es sei denn, Sie sind damit vertraut. Verwenden Sie stattdessen den IIS-Manager oder Befehlszeilenbefehle wie:
C:\Windows\System32\inetsrv\appcmd.exe set site "testsite" /bindings:"https://testsite.contoso.com:443"
Denken Sie daran, dass der DNS-Eintrag testsite.contoso.com auf die IP-Adresse Ihres Servers verweisen muss. Wenn Sie mehrere SSL-Websites auf einer IP-Adresse hosten, aktivieren Sie SNI in den Bindungseinstellungen – am einfachsten über die IIS-Benutzeroberfläche oder per Skript.Übrigens: Wenn Sie lokal testen, empfiehlt es sich, die Hosts-Datei zu bearbeiten und testsite.contoso.com auf 127.0.0.1C:\Windows\system32\drivers\etc\hosts zuzuordnen. Dies ist besonders für Browsertests geeignet.
Betrieb mehrerer Websites auf verschiedenen IP-Adressen
Für eine striktere Trennung empfiehlt sich die Einrichtung einer separaten IP-Adresse für jeden Standort. Dazu müssen Sie Ihrer Netzwerkkarte eine neue IP-Adresse zuweisen – dies ist über einen IP-Alias oder ein VLAN möglich. Fügen Sie beispielsweise 192.168.13.101 neben Ihrer Haupt-IP-Adresse hinzu.
- Warum das hilfreich ist: IIS kann an verschiedene IP-Adressen binden, daher ist keine Konfiguration von Host-Headern oder SSL SNI erforderlich. Es erkennt anhand der verwendeten IP-Adresse, welche Website ausgeliefert werden soll.
- Anwendungsfall: Sie betreiben mehrere SSL- oder Nicht-SSL-Websites auf demselben Server und wünschen eine absolute Trennung.
- Was Sie erwartet: Jede Website lauscht auf ihrer eigenen IP-Adresse, ihrem eigenen Port und ihrem eigenen Hostnamen. Einfache Konfiguration in IIS oder über PowerShell.
So fügen Sie die IP-Adresse unter Windows hinzu:
Get-NetIPAddress | ft IPAddress, InterfaceAlias, SkipAsSource New-NetIPAddress –IPAddress 192.168.13.101 –PrefixLength 24 –InterfaceAlias “Ethernet” –SkipAsSource $True
Sobald die IP-Adresse eingerichtet ist, öffnen Sie IIS, bearbeiten Sie die Websitebindungen, wählen Sie die neue IP-Adresse aus, legen Sie den Port auf 80 oder 443 fest und speichern Sie die Änderungen. Vergessen Sie nicht, die DNS-Einträge zu aktualisieren – erstellen Sie neue A-Einträge, die Ihre Domainnamen auf die jeweilige neue IP-Adresse verweisen. Es empfiehlt sich außerdem, PTR-Einträge für die Reverse-Lookup-Funktion hinzuzufügen.
Verwalten von IIS-Websitebindungen mit PowerShell
Wenn Sie es leid sind, sich durch die Benutzeroberfläche zu klicken, ist PowerShell genau das Richtige für Sie. Mit dem WebAdministration- Modul wird die Bedienung kinderleicht.
- Warum es hilft: Es beschleunigt Massenänderungen, Skripte und Automatisierungen. Außerdem: weniger Klicks, mehr Klicks.
- Anwendungsfall: Bei der Verwaltung mehrerer Standorte oder beim Versuch, die Bereitstellung zu automatisieren.
- Was Sie erwartet: Sie können Bindungen einfach anzeigen, hinzufügen oder ändern, z. B.Ports, IPs, Host-Header ändern oder sogar Bindungen komplett entfernen.
Beispielbefehle:
Import-Module WebAdministration #get all IIS sites and their bindings Get-IISSite #specifically for a site: (Get-Website -Name testsite).bindings. Collection #change port to 81 Set-WebBinding -Name testsite -BindingInformation "*:443:testsite.contoso.com" -PropertyName 'Port' -Value '81' #set new IP address Set-WebBinding -Name testsite -BindingInformation "192.168.13.101:81:testsite.contoso.com" -PropertyName 'IPAddress' -Value '192.168.13.100' #add new binding New-WebBinding -Name testsite -IPAddress * -Port 8080 -HostHeader testsite.contoso.com -Protocol http #remove a binding Remove-WebBinding -Name NewSite3 -BindingInformation "*:9090:"
Diese Befehle ermöglichen den Betrieb mehrerer Websites mit unterschiedlichen IP-Adressen oder Ports ohne die üblichen umständlichen manuellen Anpassungen in der Benutzeroberfläche. Beachten Sie jedoch, dass Sie in manchen Konfigurationen Administratorrechte benötigen oder IIS nach Änderungen neu starten müssen.
Zusammenfassung
- Verwenden Sie Host-Header und DNS, um mehrere Websites auf Port 443 auf derselben IP-Adresse zu hosten.
- Für eine vollständige Trennung weisen Sie Ihrem Server mehrere IP-Adressen zu und binden Sie jede Website entsprechend.
- PowerShell kann Bindungen schneller und flexibler verwalten als die Benutzeroberfläche.
Zusammenfassung
Mehrere Websites unter IIS zum Laufen zu bringen, ist nicht immer einfach, insbesondere bei SSL. Aber ehrlich gesagt, mit ein bisschen DNS-Know-how, Host-Headern oder IP-Adressanpassung ist es durchaus machbar. Der Trick besteht darin zu verstehen, wie IIS Websites bindet und welche Informationen zur Unterscheidung verwendet werden. Zugegeben, die Konfigurationsdateien sind oft unübersichtlich, aber die Verwendung der Benutzeroberfläche oder von PowerShell sorgt für Übersichtlichkeit. Hoffentlich hilft das jemandem, die Panik zu vermeiden, wenn IIS die Fehlermeldung „Port bereits belegt“ ausgibt. Ich bin mir nicht sicher, warum es funktioniert, aber bei einer Konfiguration hat es nach dem Hinzufügen der Host-Header einfach geklappt, was – zumindest vorerst – meist der einfachste Weg ist.