Manchmal ist es nötig, einen HTTP-Reverse-Proxy einzurichten, um irgendwelche Dienste umzubiegen oder einen nicht HTTPS-fähigen Webserver über eine verschlüsselte Verbindung zu erreichen.
Ich verwende hierfür gerne den Apache, da er sehr flexibel ist und die Realisierung damit relativ einfach geschehen kann.
Dabei ist natürlich die Konfiguration für das unverschlüsselte Web einfacher zu bewerkstelligen als die verschlüsselte Variante, aber nicht viel mehr.
Um einen Linux-Server überhaupt als Reverse-Proxy betreiben zu können, müssen natürlich zuerst einige Vorkehrungen getroffen werden.
Als erstes installieren wir den Apache:
sudo apt-get install apache2
Danach aktivieren wir die Erweiterungen proxy, proxy_http und ggf. ssl:
sudo a2enmod proxy proxy_http ssl
Nun ist der Apache präpariert und die einzelnen Seiten können konfiguriert werden.
Es empfiehlt sich für jede einzelne Seite, die der Proxy „relayen“ soll eine eigene Konfiguration in „sites-available“ zu erstellen und dann mit a2ensite <Seitenname> zu aktivieren.
Soll der Server jedoch nur eine einzige verarbeiten, kann auch der Default „000-default.conf“ verwendet werden.
Um HTTP zu verarbeiten bearbeiten wir die gewünschte Seiten-Konfiguration und fügen folgendes ein:
<VirtualHost *:80> ServerName <domain.tld> ServerAlias <www.domain.tld> # /=Welches Unterverzeichnis, http://... soll von wo aus umleiten. ProxyPass / http://sub.domain.tld/ # Analog zu ProxyPass nur hier als Ziel. ProxyPassReverse / http://sub.domain.tld/ </VirtualHost>
Bei HTTPS wird es etwas komplizierter, ist aber dennoch leicht verständlich:
<VirtualHost *:443> ServerName <domain.tld> ServerAlias <www.domain.tld> SSLProxyEngine On # Analog zu oben ProxyPass / https://sub.domain.tld/ # Analog zu oben ProxyPassReverse / https://sub.domain.tld/ # Wenn unbeglaubigtes Zertifikat zwischen Server und Proxy installiert ist: SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off #----------------- SSLEngine on SSLCertificateFile /etc/apache2/cert/public.pem SSLCertificateKeyFile /etc/apache2/cert/privkey.pem SSLCertificateChainFile /etc/apache2/cert/ca.pem </VirtualHost>
Jetzt noch den Apache neustarten und wenn alles stimmt, fungiert er nun als Proxy:
sudo service apache2 restart