06
Jul
2024

Apache: SSL-Webanwendungen hinter Reverse Proxy

Möchte man eine Webanwendung (Beispielsweise WordPress, Durpal, Magento) hinter einen Apache als Reverse Proxy betreiben, so wird man spätestens bei der Verwendung von SSL vor ein Problem gestellt:

Apache dient als SSL Backend, das heißt, dass das die Kommunikation zum Backend-Server unverschlüsselt erfolgt. Betreibt man nun eine Anwendung, die SSL erzwingt, wird man üblicherweise in einem Endlos-Loop landen.

Die Ursache ist folgende: Während der Client über SSL (HTTPS://…) auf die Anwendung zugreift, sieht der Backender Server nur (HTTP://…) und wird versuchen einen Redirect auf (HTTPS://…) durchzuführen. Für den Client erfogt immer eine Weiterleitung von HTTPS://.. auf HTTPS://… während das Backend immer nur HTTP://.. sieht.

VHost Konfigurieren
Mit eine einzelnen Konfigurationszeile im SSL-Vhost auf dem Proxyserver kann man dieses Problem umgehen:

In die SSL VHost konfiguration fügt man folgenden Zeile ein:

RequestHeader set X-Forwarded-Proto „https“
Das sieht dann Beispielsweise so aus:

 


#Setze X-Forwarded-Proto auf HTTPS für das Backend
RequestHeader set X-Forwarded-Proto "https"

ServerName example.com

#Notwendig, damit die vollständige URL an das Backend weitergegeben wird.
ProxyPreserveHost on

#Alles was an example.com ankommt, wird an das Backend weitergeleitet
ProxyPass / http://10.0.0.1/ retry=0
ProxyPassReverse / http://10.0.0.1/ retry=0

#Mehr SSL Konfig


…..

Damit enthält der HTTP-Header die Information, dass es sich um einen SSL-Request handelt.

1. Möglichkeit: PHP-Anwendung konfigurieren
Manche PHP-Webanwendungen überprüfen nur den eigentlichen Protocol-Header mit $_SERVER[‚HTTPS‘]. Mit einer kleinen If-Anweisung kann man das Problem einfach umgehen:


if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'){
$_SERVER['HTTPS']='on';
}


Der Code prüft dann den vom Proxy veränderten/gesetzten HTTP-Header und setzt das HTTPS Global entsprechend. Dieses Snippet kann man zum Beispiel in die Datei wp-config.php einer WordPress Installation einfügen, damit ein SSL-Backend funktioniert.

2. Möglichkeit: .htaccess konfigurieren
Wenn man nicht im PHP-Code seiner Anwendung herumpfuschen will, dann kann man auch über die .htaccess Datei auf dem Backend-Server HTTPS vortäuschen.

Dazu genügt es folgende Zeile hinzuzufügen:

SetEnvIf X-Forwarded-Proto https HTTPS=on

gefunden auf: https://wiki.wiba10.de/doku.php/software:apache:reverse_proxy_ssl

Share

You may also like...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert