Virtuelle Hosts verwenden

Sie können virtuelle Hosts verwenden, wenn Sie Anwendungen und die Endpunkte für diese Anwendungen voneinander isolieren möchten.

Ein einzelner Anwendungsserver reagiert häufig auf Anforderungen von mehreren verschiedenen Host- und Portkonfigurationen. Dies ist auf eine Reihe von Gründen zurückzuführen. Beispielsweise kann ein Grund sein, wenn der Anwendungsserver auf einer Maschine mit mehreren Netzschnittstellen mit unterschiedlichen Namen ausgeführt wird oder die Anforderungen an diesen Server von einem HTTP-Server, Proxy oder einer Lastausgleichsfunktion weitergeleitet werden. In diesen Fällen empfiehlt es sich möglicherweise, zu steuern, welche Anwendung von einem bestimmten Host kontaktiert werden kann. Virtuelle Hosts stellen diese Funkion bereit. Sie gleichen den angeforderten Hostnamen und die angeforderte Portnummer (die im HTTP-Host-Header angegeben sind) mit einer konfigurierten Liste mit Hostaliassen ab.

In WebSphere Application Server Liberty ist die Standardkonfiguration ausreichend. Der virtuelle Standardhost (default_host) gleicht Anforderungen von einer Kombination aus eingehendem Host und Port ab und leitet sie an den Standardanwendungscontainer weiter.

Die folgende Liste beschreibt die Schlüsselkonfigurationselemente bei der Konfiguration virtueller Hosts.
  • ID-Wert des Konfigurationselements "virtualHost"
  • Konfiguration des Unterelements "hostAlias"
  • Konfiguration des Unterelements "allowFromEndpoint" (sofern verwendet)
  • Konfiguration des virtuellen Hosts in der Datei ibm-web-bnd.xml oder der Datei ibm-web-bnd.xmi der WAR-Datei
  • Hostattributwert von httpEndpoint
  • ID-Attributwert von httpEndpoint

Zwei Anwendungen voneinander isolieren

Das folgende Beispiel veranschaulicht einen der häufigeren Anwendungsfälle von virtuellem Hosting, damit Sie verstehen, welche Konfiguration erforderlich ist. Dieses Beispiel zeigt, wie zwei Anwendungen, die an unterschiedlichen Ports ausgeführt werden, konfiguriert werden. Außerdem wird in diesem Beispiel veranschaulicht, dass eine Anwendung nur in der localhost-Schnittstelle verfügbar ist.
<httpEndpoint id="defaultHttpEndpoint" host="*" httpPort="9080" />
<httpEndpoint id="alternateEndpoint" host="*" httpPort="9081" />

<virtualHost id="application-1">
    <hostAlias>Hostname:9080</hostAlias>
</virtualHost>

<virtualHost id="application-2">
    <hostAlias>localhost:9081</hostAlias>
</virtualHost>

<enterpriseApplication location="myApp.ear" name="App1"/>
<webApplication location="myApp2.war" name="App2" />

defaultHttpEndpoint stellt alle Schnittstellen an Port 9080 bereit und alternateEndpoint stellt alle Schnittstellen an Port 9081 bereit.

Wenn App1 eine WAR-Datei hat, die die Datei ibm-web-bnd.xml enthält, in der <virtual-host name="application-1"/> angegeben ist, kann auf diese Anwendung nur unter Hostname:9080/app1-Kontextstammverzeichnis zugegriffen werden.

Wenn App2 (eine WAR-Datei) die Datei ibm-web-bnd.xml enthält, in der <virtual-host name="application-2"/> angegeben ist, kann auf diese Anwendung nur unter localhost:9081/app2-Kontextstammverzeichnis zugegriffen werden.

Wurde bei dieser Konfiguration eine dritte Anwendung implementiert, die keinen bestimmten virtuellen Host angibt, kann auf diese Anwendung nur zugegriffen werden, wenn es sich um eine weitergeleitete Anforderung handelt, die einen Host-Header enthält, der einen anderen Port angibt. Wenn die Anforderung beispielsweise an einen Proxy an Port 80 erfolgt ist, wird dieser Port in keiner der hostAlias-Spezifikationen aufgelistet. Daher wird die Anforderung an den virtuellen Host "default_host" weitergeleitet.

Anwendungen in Abhängigkeit vom angeforderten Host oder Port isolieren

Der virtuelle Standardhost in Liberty wird auch für die JMX-Kommunikation verwendet. Wenn Sie die JMX-Kommunikation vom Anwendungsdatenverkehr isolieren möchten, müssen Sie die folgenden Schritte ausführen.
  1. Legen Sie einen Namen für den virtuellen Host fest und aktualisieren Sie Ihre Anwendung so, dass der neue Host (nicht der Standardhost) referenziert wird. Fügen Sie der Datei ibm-web-bnd.xml oder der Datei ibm-web-bnd.xmi der WAR-Datei ein virtual-host-Element hinzu.
    <?xml version="1.0" encoding="UTF-8"?>
    <web-bnd
        xmlns="http://websphere.ibm.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://websphere.ibm.com/xmk/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_0.xsd"
        version="1.0" />
    
        <virtual-host name="proxiedRequests" />
    
    </web-bnd>
  2. Fügen Sie der Datei server.xml ein virtualHost-Element hinzu. Der Name muss dem in der Anwendung angegebenen Namen entsprechen und es müssen hostAliases definiert werden, die an den neuen virtuellen Host weitergeleitet werden.
    Anmerkung: Beim abgeglichenen Hostnamen und Port handelt es sich um den ursprünglich vom Benutzer angeforderten Hostnamen und Port. Diese können dem von Liberty verwendeten Host und Port entsprechen, müssen dies aber nicht. Das folgende Beispiel zeigt, wie ein virtualHost-Element der Datei server.xml hinzugefügt wird.
    <virtualHost id="proxiedRequests">
        <hostAlias>external.host.name:80</hostAlias>
        <hostAlias>external.host.name:443</hostAlias>
    </virtualHost>

    Wenn Anforderungen von einem Proxy kommen, leitet einzig diese Konfiguration Anforderungen, die an den Proxy-Host und -Port gerichtet sind, an den virtuellen Host "proxiedRequests" weiter.

Eingeschränkter Zugriff in Abhängigkeit vom ursprünglichen Endpunkt

Wenn Sie den Zugriff auf die Standard-/Systemanwendungen einschränken möchten, die defaultHttpEndpoint verwenden, müssen weitere Schritte ausgeführt werden.
  1. Definieren Sie einen weiteren HTTP-Endpunkt (httpEndpoint). Das folgende Beispiel zeigt einen weiteren httpEndpoint.
    <httpEndpoint id="localHostOnly" host="localhost" httpPort="9081" httpsPort="9444"/>

    Dieser HTTP-Endpunkt gibt host="localhost" an, d. h., dass die Ports 9081 und 9444 nur in der localhost-Schnittstelle verfügbar sind.

  2. Aktualisieren Sie virtualHost-Definitionen, um das Attribut "allowFromEndpointRef" anzugeben. Wird dieses Attribut nicht angegeben, akzeptiert ein virtueller Host (virtualHost) nur Anforderungen vom angegebenen Endpunkt. Beispiel:
    <virtualHost id="default_host" allowFromEndpointRef="localHostOnly">
        <hostAlias>*:9081</hostAlias>
        <hostAlias>*:9444</hostAlias>
    </virtualHost>
    
    </virtualHost id="proxiedRequests">
        <hostAlias>*:9080</hostAlias>
        <hostAlias>*:9443</hostAlias>
        <hostAlias>external.host.name:80</hostAlias>
        <hostAlias>external.host.name:443</hostAlias>
    </virtualHost>
    Mit dieser Konfiguration gilt nun Folgendes:
    • Der virtuelle Host "default_host" akzeptiert jetzt Anforderungen, die ausschließlich an localhost:9081 und localhost:9444 gerichtet sind und vom Endpunkt "localHostOnly" ausgehen. Alle anderen Anforderungen an Port 9081 und Port 9444 werden zurückgewiesen. Eine Anforderung von defaultHttpEndpoing mit Host-Headern, die localhost:9081 referenzieren, wird beispielsweise zurückgewiesen.
    • Der virtuelle Host "proxiedRequests" akzeptiert jetzt neben den Anforderungen mit einem Host-Header, der den externen Hostnamen vom Proxy und Port 80 oder Port 443 referenziert, auch Anforderungen, die an Port 9080 oder Port 9443 (die von defaultHttpEndpoint verwendeten Standardports) ausgegeben werden.

Symbol das den Typ des Artikels anzeigt. Konzeptartikel



Symbol für Zeitmarke Letzte Aktualisierung: 01.12.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=cwlp_virtual_hosts
Dateiname: cwlp_virtual_hosts.html