Anwendungsgateway – Hosten mehrerer Websites

Das Hosten mehrerer Websites ermöglicht es Ihnen, mithilfe von öffentlichen Listenern mehrere Webanwendungen am selben Port eines Anwendungsgateways zu konfigurieren. Sie können eine effizientere Topologie für Ihre Bereitstellungen konfigurieren, indem Sie einem Anwendungsgateway bis zu 100 Websites hinzufügen. Jede Website kann an ihren eigenen Back-End-Pool weitergeleitet werden. Beispielsweise können die drei Domänen „contoso.com“, „fabrikam.com“ und „adatum.com“ auf die IP-Adresse des Anwendungsgateways verweisen. Sie erstellen drei Listener vom Typ „Mehrere Websites“ und konfigurieren jeden Listener für den jeweiligen Port und die jeweilige Protokolleinstellung.

Sie können auch Platzhalterhostnamen in einem Listener für mehrere Standorte und bis zu fünf Hostnamen pro Listener definieren. Weitere Informationen finden Sie unter Hostnamen mit Platzhaltern in Listenern.

Multi-site Application Gateway

Wichtig

Regeln werden in der Reihenfolge verarbeitet, in der sie im Portal für die v1-SKU aufgeführt werden. Verwenden Sie für die v2-SKU die Regelpriorität, um die Verarbeitungsreihenfolge festzulegen. Es wird dringend empfohlen, vor dem Konfigurieren eines einfachen Listeners zuerst Listener für mehrere Standorte zu konfigurieren. So wird sichergestellt, dass der Datenverkehr an das richtige Back-End geleitet wird. Wenn ein einfacher Listener zuerst aufgeführt wird und sich dafür eine Übereinstimmung mit einer eingehenden Anforderung ergibt, wird die Verarbeitung von diesem Listener durchgeführt.

Anforderungen für http://contoso.com werden an „ContosoServerPool“ und Anforderungen für http://fabrikam.com an „FabrikamServerPool“ weitergeleitet.

Analog dazu können Sie mehrere Unterdomänen derselben übergeordneten Domäne in derselben Application Gateway-Bereitstellung hosten. Beispielsweise können Sie http://blog.contoso.com und http://app.contoso.com in einer einzelnen Application Gateway-Bereitstellung hosten.

Anfordern eines Auswertungsauftrags für Routingregeln

Wenn Sie mehrere Listener verwenden, um sicherzustellen, dass der Client-Datenverkehr an das richtige Backend weitergeleitet wird, ist es wichtig, dass die Regeln für die Weiterleitung von Anforderungen in der richtigen Reihenfolge vorhanden sind. Wenn Sie beispielsweise 2 Listener mit zugehörigen Hostnamen *.contoso.com und shop.contoso.com haben, muss der Listener mit dem shop.contoso.com-Hostnamen vor dem Listener mit *.contoso.com bearbeitet werden. Wenn der Listener mit dem Hostnamen *.contoso.com zuerst bearbeitet wird, wird kein Clientdatenverkehr von dem spezifischeren shop.contoso.com-Listener empfangen.

Die Reihenfolge der Regeln kann festgelegt werden, indem den Regeln für die Weiterleitung von Anforderungen, die den Listenern zugeordnet sind, ein Wert für das Feld Priorität zugewiesen wird. Sie können eine Integerwert von 1 bis 20000 angeben. Dabei ist 1 die höchste Priorität und 20000 die niedrigste Priorität. Wenn eingehender Clientdatenverkehr mit mehreren Listenern übereinstimmt, wird die Anforderungsroutingregel mit der höchsten Priorität für die Anforderung verwendet. Jede Anforderungsroutingregel muss einen eindeutigen Prioritätswert haben.

Das Prioritätsfeld wirkt sich nur auf die Reihenfolge der Auswertung einer Anforderungsroutingregel aus. Dies ändert nicht die Reihenfolge der Auswertung von pfadbasierten Regeln innerhalb einer PathBasedRouting-Anforderungsroutingregel.

Hinweis

Wenn Sie die Regelpriorität verwenden möchten, müssen Sie für alle vorhandenen Anforderungsroutingregeln Feldwerte mit Regelpriorität angeben. Sobald das Regelprioritätsfeld verwendet wird, benötigt jede neu erstellte Routingregel auch einen Regelprioritäts-Feldwert als Teil der Konfiguration.

Wichtig

Ab API-Version 2021-08-01 ist das Regelprioritätsfeld ein Pflichtfeld in den Anforderungsroutingregeln. Die Feldwerte für die Regelpriorität bestehender Anforderungsroutingregeln, die auf der aktuellen Reihenfolge der Bewertung als Teil des ersten PUT-Aufrufs basieren, werden automatisch ausgefüllt, wenn Konfigurationsaktualisierungen mit API-Version 2021-08-01 und höher, Portal, Azure PowerShell und Azure CLI angewendet werden. Zukünftige Updates von Anforderungsroutingregeln müssten über das Regelprioritätsfeld verfügen, das als Teil der Konfiguration bereitgestellt wird.

Hostnamen mit Platzhaltern in Listenern

Application Gateway ermöglicht mithilfe von HTTP(S)-Listenern für mehrere Standorte das hostbasierte Routing. So können Sie nun im Hostnamen Platzhalterzeichen wie Sternchen (*) und Fragezeichen (?) und bis zu fünf Hostnamen pro HTTP(S)-Listener für mehrere Standorte verwenden. Beispielsweise *.contoso.com.

Durch ein Platzhalterzeichen im Hostnamen können Sie mehrere Hostnamen einem einzigen Listener zuordnen. So kann *.contoso.com beispielsweise mit ecom.contoso.com, b2b.contoso.com, customer1.b2b.contoso.com usw. übereinstimmen. Mithilfe eines Arrays von Hostnamen können Sie für einen Listener mehrere Hostnamen konfigurieren, um Anforderungen an einen Back-End-Pool weiterzuleiten. So kann ein Listener beispielsweise contoso.com, fabrikam.com enthalten und so Anforderungen für beide Hostnamen akzeptieren.

Wildcard Listener

Hinweis

Dieses Feature ist nur für die Application Gateway-SKUs Standard_v2 und WAF_v2 verfügbar.

In Azure PowerShell müssen Sie -HostNames anstelle von -HostName verwenden. Wenn Sie „HostNames“ verwenden, können Sie bis zu fünf Hostnamen als durch Trennzeichen getrennte Werte angeben sowie Platzhalterzeichen verwenden. Beispiel: -HostNames "*.contoso.com","*.fabrikam.com".

In Azure CLI müssen Sie --host-names anstelle von --host-name verwenden. Wenn Sie „host-names“ verwenden, können Sie bis zu fünf Hostnamen als durch Trennzeichen getrennte Werte angeben sowie Platzhalterzeichen verwenden. Beispiel: --host-names "*.contoso.com,*.fabrikam.com".

Im Azure-Portal müssen Sie unter dem Listener für mehrere Standorte den Hosttyp Mehrere/Platzhalter auswählen, um bis zu fünf Hostnamen mit zulässigen Platzhalterzeichen zu erwähnen.

Wildcard Listener UI

Zulässige Zeichen im Hostnamenfeld

  • (A-Z,a-z,0-9): alphanumerische Zeichen
  • -: Bindestrich oder Minus
  • .: Punkt als Trennzeichen
  • *: kann für mehrere zulässige Zeichen stehen
  • ?: kann für ein einzelnes zulässiges Zeichen stehen

Bedingungen für die Verwendung von Platzhalterzeichen und von mehreren Hostnamen in einem Listener

  • In einem einzelnen Listener können nur bis zu fünf Hostnamen verwendet werden.
  • Das Sternchen (*) kann in einer Komponente eines Domänenformat- oder Hostnamens nur einmal verwendet werden. Beispiel: Komponente1*.Komponente2*.Komponente3. (*.contoso-*.com) ist gültig.
  • In einem Hostnamen dürfen maximal zwei Sternchen (*) verwendet werden. Beispiel: *.contoso.* ist gültig, *.contoso.*.*.com ist ungültig.
  • Ein Hostname darf maximal vier Platzhalterzeichen enthalten. Beispiel: ????.contoso.com und w??.contoso*.edu.* sind gültig, ????.contoso.* ist ungültig.
  • Das Sternchen (*) und das Fragezeichen (?) dürfen in einer Komponente eines Hostnamens nicht zusammen verwendet werden (*?, ?* oder **). Beispiel: *?.contoso.com und **.contoso.com sind ungültig.

Überlegungen und Einschränkungen bei der Verwendung von Platzhaltern oder mehreren Hostnamen in einem Listener

  • Für SSL-Terminierung und End-to-End-SSL müssen Sie das Protokoll als HTTPS konfigurieren und ein Zertifikat hochladen, das in der Listenerkonfiguration verwendet werden soll. Bei einem Listener für mehrere Standorte können Sie auch den Hostnamen eingeben. Dabei handelt es sich in der Regel um den allgemeinen Namen des SSL-Zertifikats. Wenn Sie im Listener mehrere Hostnamen angeben oder Platzhalterzeichen verwenden, müssen Sie Folgendes beachten:
    • Bei einem Hostnamen mit Platzhalter wie „*.contoso.com“ müssen Sie ein Platzhalterzertifikat mit einem allgemeinen Namen wie „*.contoso.com“ hochladen.
    • Werden in einem Listener mehrere Hostnamen verwendet, müssen Sie ein SAN-Zertifikat (Subject Alternative Names, alternative Antragstellernamen) mit den allgemeinen Namen hochladen, die mit den verwendeten Hostnamen übereinstimmen.
  • Zur Angabe des Hostnamens kann kein regulärer Ausdruck verwendet werden. Das Muster des Hostnamens kann nur mithilfe von Platzhalterzeichen wie Sternchen (*) und Fragezeichen (?) gebildet werden.
  • Zur Überprüfung der Back-End-Integrität können pro HTTP-Einstellung nicht mehrere benutzerdefinierte Tests zugeordnet werden. Testen Sie stattdessen eine der Websites am Back-End, oder überprüfen Sie mit „127.0.0.1“ den lokalen Host auf dem Back-End-Server. Wenn Sie jedoch in einem Listener Platzhalter oder mehrere Hostnamen verwenden, werden die Anforderungen für alle angegebenen Domänenmuster je nach Regeltyp (einfach oder pfadbasiert) an den Back-End-Pool weitergeleitet.
  • Die Eigenschaft „hostname“ verwendet eine Zeichenfolge als Eingabe, in der Sie nur einen Nicht-Platzhalter-Domänennamen angeben können. Die Eigenschaft „hostname“ verwendet einen Zeichenfolgenarray als Eingabe, in den Sie bis zu 5 Platzhalter-Domänennamen angeben können. Beide Eigenschaften können nicht gleichzeitig verwendet werden.

Eine detaillierte Anleitung zur Konfiguration von Hostnamen mit Platzhaltern in einem Listener für mehrere Standorte finden Sie unter Erstellen eines Anwendungsgateways als Host für mehrere Websites mit Azure PowerShell oder mit Azure CLI.

Listener für mehrere Websites für TLS und TCP-Protokolllistener

Das Feature für mehrere Websites ist auch für Layer4-Proxy verfügbar, aber nur für seine TLS-Listener. Sie können den Datenverkehr für jede Anwendung an den Back-End-Pool weiterleiten, indem Sie Domänennamen im TLS-Listener angeben. Damit das Feature für mehrere Websites auf TLS-Listenern funktioniert, verwendet der Anwendungsgateway den SNI-Wert (Server Name Indication) (die Clients präsentieren hauptsächlich die SNI-Erweiterung, um das richtige TLS-Zertifikat abzurufen). Ein TLS-Listener für mehrere Websites würde diesen SNI-Wert aus den TLS-Handshakedaten einer eingehenden Verbindung auswählen und diese Verbindung an den entsprechenden Back-End-Pool weiterleiten. Die TCP-Verbindung hat inhärent kein Konzept des Hostnamens oder des Domänennamens, weshalb dies für TCP-Listener nicht verfügbar ist.

Hostheader und Servernamensanzeige

Es gibt drei allgemeine Mechanismen, um das Hosten mehrerer Websites in der gleichen Infrastruktur zu ermöglichen.

  1. Hosten von mehreren Webanwendungen, jeweils mit einer eindeutigen IP-Adresse.
  2. Verwenden der Hostnamen zum Hosten mehrerer Webanwendungen mit der gleichen IP-Adresse.
  3. Verwenden verschiedener Ports zum Hosten mehrerer Webanwendungen mit der gleichen IP-Adresse.

Derzeit unterstützt Application Gateway eine einzelne öffentliche IP-Adresse, an der es auf Datenverkehr lauscht. Daher werden mehrere Anwendungen mit eigenen IP-Adressen zurzeit nicht unterstützt.

Application Gateway unterstützt mehrere Anwendungen, die jeweils an verschiedenen Ports lauschen, für dieses Szenario müssen die Anwendungen jedoch Datenverkehr über nicht standardmäßige Ports akzeptieren.

Application Gateway verwendet HTTP 1.1-Hostheader, um mehrere Websites an der gleichen öffentlichen IP-Adresse und dem gleichen Port zu hosten. Die in Application Gateway gehosteten Websites können mit der TLS-Erweiterung für die Servernamensanzeige (Server Name Indication, SNI) auch die SSL-Auslagerung unterstützen. Das bedeutet, dass der Clientbrowser und die Back-End-Webfarm HTTP/1.1- und TLS-Erweiterungen unterstützen müssen, wie in RFC 6066 definiert.

Nächste Schritte

Hier erfahren Sie, wie Sie in Application Gateway ein Anwendungsgateway als Host für mehrere Websites konfigurieren:

Eine vollständige vorlagenbasierte Bereitstellung finden Sie unter Resource Manager-Vorlage mit Hosting mehrerer Websites.