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.



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.



Subdomain anlegen

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



.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
               AllowOverride All

               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


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>

Kommentare

Loading comments...