Weiterleitung von HTTP-Anfragen nach innen‌

Um einem Profil Daten per HTTP/HTTPS zu senden, muss man eine bestimmte URL ansprechen. Der schematische Aufbau der URL ist:


http(s)://<URL_oder_IP_Server_und_Port>/<URL-Kontext>/<URL-Suffix>


Beim Zugriff über einen DMZ-Server gelten die externen Anschlüsse des DMZ-Servers. Eingehende HTTP-Anfragen werden dann vom Integration Server auf dem DMZ-Server entgegengenommen.

Per Default wird auf HTTP-Anfragen reagiert, deren URL-Pfad mit dem URL-Kontext /forward beginnen. Diese Vorgabe kann in der Datei ./etc/startup_dmz.xml über die Parameter servletContext und servletPath geändert werden, siehe Abschnitt Parameter‌. Nachfolgend gehen wir davon aus, dass der Standard verwendet wird, also servletContext und servletPath nicht definiert werden. In diesem Fall werden dann servletContext=/forward und servletPath=/* verwendet.

Zusätzlich zum Kontext /forward, kann durch Konfiguration in der Datei ./etc/startup_dmz.xml auch erreicht werden, dass weitere HTTP-Pfade nach innen weitergeleitet werden können.


URL-Kontext

Bedingung 1

Bedingung 2

Empfohlene Forwarding-Regel in ./etc/forward.properties

/dw/Request

addStandardServlet=true


/dw/Request/*=http://<inner>/dw/Request

/dw/trigger

addStandardServlet=true


/dw/trigger/*=http://<inner>/dw/trigger

/dw/request

addStandardServlet=true


/dw/request/*=http://<inner>/dw/Request

/dw/Trigger

addStandardServlet=true


/dw/Trigger/*=http://<inner>/dw/trigger

/partner

addStandardServlet=true

handleAS2=false

/partner/AS2Retrieve/*=http://<inner>/partner/AS2Retrieve

/forward

Immer.




In der Tabelle bezeichnet <inner> die IP-Adresse oder den DNS-Namen des inneren Lobster_data, gegebenenfalls auch die Portnummer. Wenn auf diesem System der HTTPS Connector aktiv ist, kann das Forwarding auch über HTTPS erfolgen. Da die Verbindung vom DMZ-Server zum internen Lobster_data in einem geschützten Netzwerkteil erfolgt, ist aber dort eine nochmalige Verschlüsselung per HTTPS normalerweise nicht notwendig.

Falls der DMZ-Server innerhalb ./etc/hub.xml mehrere ServerConnectors (Port 80, 443, usw.) hat, werden alle Requests, die über einen der ServerConnectors eintreffen und einer Forward-Regel entsprechen, entsprechend der Regel weitergeleitet. Auf dem Zielsystem kann nicht mehr unterschieden werden, ob der ursprüngliche Request über Protokoll HTTP oder HTTPS eingetroffen ist.

Diese Pfade (Tabelle) sind zusätzlich und unabhängig von dem Pfad /forward nutzbar, wenn die angegebenen Bedingungen in der Konfiguration (./etc/startup_dmz.xml) erfüllt sind. Der Pfad /partner/* wird bei handleAS2=true nicht vom HttpForwardServlet, sondern vom AS2Service auf dem DMZ-Server übernommen. Siehe auch Abschnitt AS2 auf dem DMZ-Server‌.

Das Forwarding wird erst wirksam, wenn auch eine entsprechende Forwarding-Regel für den Pfad oder einen Sub-Pfad existiert. In der Forwarding-Regel muss nicht der gesamte Kontext weitergeleitet werden, man kann auch einzelne Unterpfade angeben. So kann man z. B. steuern, ob alle Profile mit HTTP-Eingangsagent auch über den DMZ-Server Daten durch HTTP-Upload erhalten können, oder nur einzelne ausgewählte Profile. Eine Forwarding-Regel, deren linker Teil nicht zu einem der angegebenen Pfade passt, ist nicht wirksam. Nachfolgend werden die Forwarding-Regeln anhand des Kontexts /forward genauer erläutert.


Forwarding-Regeln (Datei ./etc/forward.properties)

Nun muss festgelegt werden, ob bzw. wohin die eingehenden HTTP-Anfragen weitergeleitet werden. Zum Beispiel sollen ja Anfragen für ein Lobster_data-Profil zum inneren Server weitergeleitet werden. Die Festlegung dafür erfolgt in der Datei ./etc/forward.properties.

Jede Zeile dieser Datei stellt eine unabhängige Regel dar. Die linke Seite (Quell-Kontext), links neben dem Gleichheitszeichen, muss eindeutig sein. Die Regel wirkt nur, wenn für den Quell-Kontext auch ein HttpForwardServlet aktiv ist (siehe Tabelle oben).


...
/forward/*=http://www.google.de
/forward/images/*=http://www.google.de/images
/forward/intl/de_de/images/*=http://www.google.de/intl/de_de/images
/forward/E/*=http://www.lobster.de
...
#Forward an inneren Lobster_data
/forward/example/*=http://192.168.213.80/dw/Request/urlsuffix/example
...


Hinweis: Änderungen in der Datei ./etc/forward.properties werden zur Laufzeit erkannt und neu ausgewertet. Ein Neustart des Systems ist nicht notwendig. Für Diagnosezwecke kann man das HTTP-Requestlog und das Serverlog unter ./logs auswerten. Achtung: Die Zeiten im Requestlog sind in der Zeitzone UTC, die im Serverlog sind in der Systemzeitzone.


Die folgende Tabelle zeigt exemplarisch einige Beispiele, wohin eingehende HTTP-Anfragen mit der gezeigten Konfiguration weitergeleitet werden.

Eingehende HTTP-Anfrage

Weitergeleitete HTTP-Anfrage

http://www.xyz.com/forward/example

http://www.google.de/example

http://www.xyz.com/forward/images/example.jpg

http://www.google.de/images/example.jpg

http://www.xyz.com/forward/intl/de_de/images/example.jpg

http://www.google.de/intl/de_de/images/example.jpg

http://www.xyz.com/forward/E/index.html

http://www.lobster.de/index.html

http://www.xyz.com/forward/example/file.txt

http://192.168.213.80/dw/Request/urlsuffix/example/file.txt

http://www.xyz.com/noforward/

Keine Weiterleitung.


Hinweis: Um URL-Pfade mit den Lobster_data-Standard-Kontexten

• zum Triggern eines Profils (Default-Kontext /dw/trigger/),

für einen HTTP-Request (Default-Kontext /dw/Request/),

• für einen AS2-Empfang (Default-Kontext /partner/AS2Retrieve/)


verwenden zu können, können sie für den CommunicationForwardManager über den Eintrag addStandardServlets in der Datei ./etc/startup_dmz.xml (siehe Abschnitt Parameter‌ für Klasse "CommunicationForwardManager‌") eingerichtet werden, siehe folgendes Listing.


<Call name="addApplication">
<Arg>
<New class="com.ebd.hub.datawizard.app.CommunicationForwardManager">
...
<!-- Add /dw/Trigger, /dw/Request (also in lowercase) and /partner servlets on demand -->
<Call name="addStandardServlets"><Arg type="boolean">True</Arg></Call>
...
</New>
</Arg>
</Call>

Für Weiterleitungen nach innen könnte dann in der Datei ./etc/forward.properties z. B. folgendes stehen.


/dw/Request/*=http://<Innerer_Server_und_Port>/dw/Request


Hinweis: Es ist möglich HTTP(S)-Anfragen über den MessageService zu tunneln. Dazu fügen Sie bitte folgende Option in der Konfigurationsdatei ./etc/startup_dmz.xml auf dem DMZ-Server ein. Die Konfigurationsdatei ./etc/forward.properties muss auch in diesem Fall (wie oben beschrieben) angepasst werden.


<Set name="tunnelHttp">true</Set>


Hinweis: Das HttpForwardServlet wird auch verwendet, um im Antwortweg eines Profils per HTTP oder HTTPS via DMZ zu senden. Das ist von der hier beschriebenen Konfiguration unabhängig.