Apache ist als Webserver den meisten bekannt, mit der üblicherweise mitgelieferten mod_proxy_html kann er jedoch auch als reverse Proxy eingesetzt werden. Ein solcher Proxy nimmt HTTP-Anfragen entgegen und leitet sie an einen anderen Weberver weiter. Dies kann z.B. hilfreich sein um Anfragen auf mehrere Server im Hintergrund zu verteilen, eine zusätzliche Abschottung interner Server bereitstellen oder auch durch die Terminierung der HTTPS-Verbindung oder dem Vorfiltern von Headern die Belastung der nachgeschalteten Systeme zu mindern.
Zur Konfiguration stellt man erst sicher, dass das Modul geladen ist. Hierzu wird in der Apache-Konfiguration (Arch Linux: /etc/httpd/conf/httpd.conf) sichergestellt, dass die folgenden Zeilen aktiv sind:
LoadModule xml2enc_module modules/mod_xml2enc.so LoadModule proxy_html_module modules/mod_proxy_html.so
Nun kann im gewünschten VHost eine passende Weiterleitung realisiert werden:
#Nur definierte Requests annehmen ProxyRequests Off #Fileshare ProxyPass /dateiserver http://publicfiles.lan.adlerweb.info/upload ProxyPassReverse /dateiserver http://publicfiles.lan.adlerweb.info/upload #Requestform ProxyPass /request https://http.lan.adlerweb.info/request ProxyPassReverse /request https://http.lan.adlerweb.info/request #Buildimg ProxyPass /autobuild https://inferno.lan.adlerweb.info/results ProxyPassReverse /autobuild https://inferno.lan.adlerweb.info/results
Wenn das interne Ziel per HTTPS angesprochen werden soll, so sollte die jeweilige Zertifizierungsstelle im System bekannt sein. Hierzu kann auch eine eigene CA-Datei verwendet werden:
SSLProxyCACertificateFile /etc/ssl/private/interneca.crt
Wenig Zeilen, große Wirkung: Surft man nun die angegebenen Pfade des Webservers an, so wird die Anfrage an den angegebenen Server weitergeleitet. Der Apache selbst terminiert hierbei die Clientverbindung, entsprechend werden Funktionen (z.B. externes HTTPS-Zertifikat) verwendet. Auch DoS-Angriffe oder versuche mit kaputten HTTP-Headern treffen primär den exponierten Server und schlagen nicht ohne Weiteres zum internen Webserver durch.
Update: ProxyRequests Off fehlte – wenn auf On agiert der Server als offener Proxy-Server. Default ist Off, daher sollte auch ohne explizites definieren nichts passieren, aber vorsichtshalber kann es nichts schaden hier nochmal zu definieren.
3 Gedanken zu „Apache als Reverse Proxy“