Betrieb hinter Proxy/Load-Balancer o.ä.
Sollte der Anwendungsserver (z.B. Apache Tomcat), auf welchem Xima® Formcycle installiert ist, hinter einem weiteren Server wie z.B. einem Revers-Proxy, einem Load-Balancer oder ähnlichem betrieben werden, ist zu beachten, dass die Informationen eines Aufrufs unverändert an diesen übermittelt werden. Konkret bedeutet dies, dass sowohl der Host-Header als auch das verwendete Protokoll durch die zwischengeschalteten Server unverändert weitergereicht werden müssen. In den meisten Standardkonfigurationen ist dies jedoch nicht der Fall, da die Anfragen vom zwischengeschalteten Server entgegengenommen und als neue Anfrage an den Anwendungsserver gestellt werden.
Der problematische Ablauf (siehe Abbildung) ist hierbei folgender:
- Der Benutzer ruft die URL https://www.example.com/formcycle auf.
- Die Anfrage wird vom zwischengeschalteten Server entgegengenommen und interpretiert.
- Der zwischengeschaltete Server stellt eine neue Anfrage an den dafür vorgesehenen Server. Da hier jedoch ein interner Aufruf stattfindet, kommt es zur Änderung der Aufruf-URL zu http://192.168.0.1/formcycle. Diese URL kommt nun beim Anwendungsserver an und beinhaltet nicht mehr die benötigten Informationen welche URL vom Benutzer eigentlich aufgerufen wurde.
Beispielkonfiguration Apache
Für die korrekte Konfiguration eines Apache-Server, welcher als Revers-Proxy agiert, sind zwei Punkte relevant und z.B. in der Konfiguration der VirtualHost´s zu hinterlegen:
- Die Anweisung ProxyPreserveHost On zum Erhalt des ursprünglich aufgerufenen Host-Headers
- Die Separierung der einzelnen Protokolle und deren Verwendung bei der Weiterleitung zum Anwendungsserver. Dies bedeutet, dass für HTTP und HTTPS ein eigener VirtualHost mit entsprechender Konfiguration benutzt werden muss.
Diese Konfiguration ist, ebenso wie die ggf. nötigen Einstellungen bei der Verwendung selbsterstellter Zertifikate, hier kurz veranschaulicht:
...
# Aktiviert das Erhalten des ursprünglich aufgerufenen Hosts bis zum Anwendungsserver.
ProxyPreserveHost On
...
# Weiterleitung über HTTP
ProxyPass / http://192.168.0.1/
ProxyPassReverse / http://192.168.0.1/
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost www.example.com:443>
...
SSLEngine on
SSLProxyEngine On
...
# Aktiviert das Erhalten des ursprünglich aufgerufenen Hosts bis zum Anwendungsserver.
ProxyPreserveHost On
# Deaktiviert falls nötig die Prüfung des Zertifikats des Anwendungsserver.
# Nötig falls es sich um selbsterstelle Zertifikate handelt.
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
...
# Weiterleitung über HTTPS
ProxyPass / https://192.168.0.1/
ProxyPassReverse / https://192.168.0.1/
</VirtualHost>
</IfModule>