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>