Linux und Windows HelpDesk

Zoneminder hinter Apache Reverse Proxy.

Möchte man Zoneminder hinter einem schon bestehenden Apache Webserver betreiben und von außen über die FQDN erreichbar machen, kann man im bestehenden Apache-Webserver, einen Reverse Proxy auf Zoneminder einrichten. Zoneminder ist dann über eine Subdomain wie z.B. zone.domain.de erreichbar. Auf dem bestehenden Apache muss dafür das Modul mod_proxy vorhanden sein.

Zunächst erstellt man auf seinem bereits bestehenden Apache-Webserver, unter /etc/apache2/sites-available/ eine Datei mit dem gewünschten Namen des Zoneminder-VHOST und editiert diese mit dem Editor seiner Wahl.

# touch /etc/apache2/sites-available/VIRTUALHOST.conf
# mcedit /etc/apache2/sites-available/VIRTUALHOST.conf

Für einen einfachen Zoneminder-Vdomain.der per http erreichbar ist genügt es bereits, den nachfolgenden Abschnitt in die Datei einzutragen und diese abzuspeichern. Die individuellen Angaben wie Name, Alias, IP... müssen dabei natürlich angepasst werden.

<VirtualHost *:80>
    ServerName zone.domain.de:80
    ServerAlias www.zone.domain.de
    ServerAdmin root@domain.de
    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>
      ProxyRequests On
      ProxyPreserveHost On
      ProxyPass /zm/ http://192.168.120.200/zm/
      ProxyPassReverse /zm/ http://192.168.120.200/zm/
      ProxyPass / http://192.168.120.200/zm/
      ProxyPassReverse / http://192.168.120.200/zm/
    ErrorLog /var/www/log/zone_error_log
    CustomLog /var/www/log/zone_access_log combined
</VirtualHost>

Soll Zoneminder per https erreicht und z.B. das schon vorhandene Let's Encrypt Zertifikat verwendet werden, muss der Eintrag in die /etc/apache2/sites-available/ mit den Angaben zu Port 443 erweitert werden.
Die Zeile "Redirect permanent" ist Optional und sorgt dafür, dass Zoneminder nur über https aufgerufen wird. Wird sie nicht verwendet, ist sowohl http wie auch https möglich.

<VirtualHost *:80>
    ServerName zone.domain.de:80
    ServerAlias www.zone.domain.de
    ServerAdmin root@domain.de
    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>
      ProxyRequests On
      ProxyPreserveHost On
      ProxyPass /zm/ http://192.168.120.200/zm/
      ProxyPassReverse /zm/ http://192.168.120.200/zm/
      ProxyPass / http://192.168.120.200/zm/
      ProxyPassReverse / http://192.168.120.200/zm/
    Redirect permanent / https://zone.domain.de:443/
    ErrorLog /var/www/log/zone_error_log
    CustomLog /var/www/log/zone_access_log combined
</VirtualHost>
<VirtualHost *:443>
    ServerName zone.domain.de:443
    ServerAlias www.zone.domain.de
    ServerAdmin root@domain.de
    SSLEngine On
    SSLCertificateFile /usr/local/ssl/certs/domain.de.pem
    SSLCertificateKeyFile /usr/local/ssl/certs/domain.de.pem
    Header add Strict-Transport-Security "max-age=15768000"
    <Files ~ "\.(pl|cgi|shtml|phtml|php|php?)$">
        SSLOptions +StdEnvVars
    </Files>
    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>
      ProxyRequests On
      ProxyPreserveHost On
      ProxyPass /zm/ http://192.168.120.200/zm/
      ProxyPassReverse /zm/ http://192.168.120.200/zm/
      ProxyPass / http://192.168.120.200/zm/
      ProxyPassReverse / http://192.168.120.200/zm/
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
    ErrorLog /var/www/log/zone_error_log.ssl
    CustomLog /var/www/log/zone_access_log.ssl combined
</VirtualHost>

In jedem Fall, muss der Zoneminder-VHOST zum Abschluss aktiviert werden.
Unter Systemen auf Basis von Debian, wie es auch Ubuntu ist, kann das sehr einfach auf der Kommandozeile mit diesem Befehl erfolgen.

# sudo a2ensite VIRTUALHOST.conf

Alternativ kann ein Softlink erstellt und Apache neu gestartet werden.

# ln -s /etc/apache2/sites-available/VIRTUALHOST.conf /etc/apache2/sites-enabled/VIRTUALHOST.conf
# service apache2 restart

Das ganze funktioniert natürlich nicht nur mit Zoneminder sondern auch mit anderen Webdiensten im eigenen Netzwerk, die auf unterschiedlichen VMs oder physischen Maschinen in Betrieb sind.