MOBOTIX Cam über Apache Proxy

Eine für mich exotische Aufgabe war, mehrere Überwachungskameras über eine Website verfügbar zu machen. Eine Cam über eine URL mit dem Apache Server zu installieren ist keine besondere Sache. Zahlreiche Anleitungen existieren, wie die Direktive „ProxyPass“ einzusetzen ist.

Interessanter ist es, beliebig viele Cams über eine URL – nur durch Path unterschieden – im Apache zu realisieren.

Das Userinterface der MOBOTIX Cam setzt direkte  und relative Links, weshalb das Umleiten über den Proxy schwierig ist. Der Proxy muss mit dem Wechsel der Art und Weise zurecht kommen.

Es soll also über eine URL, mit den Paths /CAM1/, /CAM2/ ….. usw. das Kamerainterface, Bild und Livestream dem User zur Verfügung gestellt werden. Das Menuesystem, jeder CAM ist in seiner Struktur zwei bis drei Stufen tief. Das ist zu beachten, da jeder User auch mehrere CAMs geöffnet haben kann.

Wie in dem Listing zu sehen, wird ein Mapping und Rewriting der Proxydaten vorgenommen. Sobald der User aber mehrere Funktionen oder Ebenen der Menüstruktur aufruft, fügt das Substitute mehrmals, je nach dem ob der Link relativ oder direkt ist, den Path hinzu. Hier steuere ich mit Substitute „s|/CAM1/CAM1/|/CAM1/|i“ gegen. Als so zu sagen“letzte“ Regel, verhindere ich die Path Kaskadierung der vorherigen Umschreibung.

Diese Konfiguration läuft für beliebig viele CAMS und durch alle Ebenen der Menüs.

<VirtualHost *:443>
 ..........

ProxyRequests off
ProxyPreserveHost Off
ProxyHTMLInterp On
ProxyPass         /CAM1/ http://URL.CAM1.INTERN/
ProxyPass         /CAM2/ http://URL.CAM2.INTERN/

ProxyHTMLURLMap http://URL.CAM1.INTERN/ /CAM1
ProxyHTMLURLMap http://URL.CAM2.INTERN/ /CAM2

<Location /CAM1/>
 RequestHeader unset Accept-Encoding
 setOutputFilter proxy-html
 AddOutputFilterByType SUBSTITUTE text/html

 Substitute "s|/admin/|/CAM1/admin/|i"
 Substitute "s|/cgi-bin/|/CAM1/cgi-bin/|i"
 Substitute "s|/control/|/CAM1/control/|i"
 Substitute "s|/decor/|/CAM1/decor/|i"
 Substitute "s|/help/|/CAM1/help/|i"
 Substitute "s|/record/|/CAM1/record/|i"
 Substitute "s|/webcam/|/CAM1/webcam/|i"
 Substitute "s|/server/|/CAM1/server/|i"
 Substitute "s|/CAM1/CAM1/|/CAM1/|i"

 ProxyHTMLURLMap / /CAM1/
 ProxyHTMLURLMap /CAM1 /CAM1
 ProxyPassReverse /
 </Location>

<Location /CAM2/>
 ..........

</Location>

### Livestreams

ProxyPass /CAM1STREAM http://URL.CAM1.INTERN/cgi-bin/faststream.jpg?stream=full&html
ProxyPass /CAM2STREAM http://URL.CAM2.INTERN/cgi-bin/faststream.jpg?stream=full&html

</VirtualHost>