Aktionen

Apache2 als http / https Proxy zu anderen Host

Aus znilwiki

Im Zuge meines Umbau des Servers für das znilwiki habe ich auch meinen Zabbix-Server auf einen anderen Host verlegt.
Dieser hat intern die IP

192.168.200.15

Die Anfragen von außen landen alle auf

http://zabbix.znil.net
https://zabbix.znil.net

Auf einem anderen Ubuntu Server - der auch die http://znil.net Webseite mit dem Wiki hostet. Die Anfragen an den Zabbix-Server sollen nun aber "durchgeleitet" werden.
Und das ist eigentlich gar nicht so schwer.



1 Apache Module nachinstallieren / aktiviern

Um den Apache auch als Reverse Proxy nutzen zu können brauch es ein paar Module die erst noch aktiviert werden müssen:

a2enmod rewrite
a2enmod proxy_http
a2enmod ssl

Im Anschluss ein

service apache2 restart

und es kann losgehen.



2 Subdomain anlegen

Zunächst legt die Subdomain dazu in ISPConfig bzw. direkt als vhost an.



3 .vHost bearbeiten

Dann bearbeitet die .conf Datei der Webseite, also z.B. die

nano /etc/apache2/sites-enabled/100-zabbix.znil.net.vhost

und löscht den gesamten Inhalt. Ersetzt diesen durch folgenden Inhalt:

<Directory /var/www/zabbix.znil.net>
               AllowOverride None
                               Require all denied
               </Directory>

<VirtualHost 192.168.200.10:80>

               ServerName zabbix.znil.net
               ServerAdmin webmaster@zabbix.znil.net

               ProxyPass / http://192.168.200.15/
               ProxyPassReverse / http://192.168.200.15/
</VirtualHost>
 
<VirtualHost 192.168.200.10:443>

               ServerName zabbix.znil.net
               ServerAdmin webmaster@zabbix.znil.net

               SSLEngine on
               SSLCertificateFile /var/www/clients/client0/web7/ssl/zabbix.znil.net.crt
               SSLCertificateKeyFile /var/www/clients/client0/web7/ssl/zabbix.znil.net.key

               ProxyPass / http://192.168.200.15/
               ProxyPassReverse / http://192.168.200.15/
</VirtualHost>

In dem obigen Fall findet die Kommunikation zwischen dem Apache2 Host und dem Weiterleitungsziel unverschlüsselt statt:

Internet -> SSL Verbindung per https:// -> Apache2 Proxy -> Weiterleitung unverschlüsselt per http:// -> Zielserver 192.168.200.15




Soll auch der Datenverkehr zwischen dem Apache2 Proxy und der Zeilseite verschlüsselt ablaufen so muss der 2. teil wie folgt lauten:

 <VirtualHost 192.168.200.10:443>

               ServerName zabbix.znil.net
               ServerAdmin webmaster@zabbix.znil.net

               SSLEngine on
               SSLCertificateFile /var/www/clients/client0/web7/ssl/zabbix.znil.net.crt
               SSLCertificateKeyFile /var/www/clients/client0/web7/ssl/zabbix.znil.net.key

               SSLProxyEngine On
               ProxyPass / https://192.168.200.15/
               ProxyPassReverse / https://192.168.200.15/
</VirtualHost>

Statt der IP-Adressen sind übrigends auch FQDN-Namen erlaubt - der Server auf dem der Apache2 Proxy läuft muss den Namen auflösen können!

Falls Ihr nun noch eine Fehlermeldung wie diese bekommt:
Proxy Error

The proxy server could not handle the request GET /web_app.
Reason: Error during SSL Handshake with remote server

dann ändert den 2. Teil wie folgt:

 <VirtualHost 192.168.200.10:443>

               ServerName zabbix.znil.net
               ServerAdmin webmaster@zabbix.znil.net

               SSLEngine on
               SSLCertificateFile /var/www/clients/client0/web7/ssl/zabbix.znil.net.crt
               SSLCertificateKeyFile /var/www/clients/client0/web7/ssl/zabbix.znil.net.key

               SSLProxyEngine On
               SSLProxyVerify none 
               SSLProxyCheckPeerCN off
               SSLProxyCheckPeerName off
               SSLProxyCheckPeerExpire off
               ProxyPass / https://192.168.200.15/
               ProxyPassReverse / https://192.168.200.15/
</VirtualHost>

Damit schalten wir sämtliche Prüfungen auf Zertifikatsgültigkeiten auf dem internen Weg ab


4 Mattermost

Einstellungen für Mattermost:

        # setup the proxy
        <Proxy *>
                Order allow,deny
                Allow from all
        </Proxy>

        ProxyPreserveHost On
        ProxyRequests Off

        RewriteEngine On
        RewriteCond %{REQUEST_URI} /api/v[0-9]+/(users/)?websocket [NC,OR]
        RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR]
        RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
        RewriteRule .* ws://127.0.0.1:8065%{REQUEST_URI} [P,QSA,L]
        # RewriteRule .* wss://127.0.0.1:8065%{REQUEST_URI} [P,QSA,L]
        RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
        RewriteRule .* http://127.0.0.1:8065%{REQUEST_URI} [P,QSA,L]

        <LocationMatch "^/api/v(?<apiversion>[0-9]+)/(?<apiusers>users/)?websocket">
                Require all granted
                ProxyPass ws://127.0.0.1:8065/api/v%{env:MATCH_APIVERSION}/%{env:MATCH_APIUSERS}websocket
                ProxyPassReverse ws://127.0.0.1:8065/api/v%{env:MATCH_APIVERSION}/%{env:MATCH_APIUSERS}websocket
                ProxyPassReverseCookieDomain 127.0.0.1 moin.znil.net
        </LocationMatch>

        <Location />
                Require all granted
                ProxyPass http://127.0.0.1:8065/
                ProxyPassReverse http://127.0.0.1:8065/
                ProxyPassReverseCookieDomain 127.0.0.1 moin.znil.net
        </Location>

5 Kommentare


Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen.