Raspberry Pi 4

Zugriff auf openwebrx über Apache als Reverse Proxy

Hin und wieder gibt es den Wunsch, eine Anwendung die auf einem Raspberry Pi läuft, via Webserver zu erreichen. Hat den Vorteil das man kein VPN, keine weitere Portfreigabe und man sich nicht die Portnummer der Anwendung  merken muss.

 Geschehen ist es mit “openwebrx” da die Anwendung auf einem Raspberry Pi läuft. Mit dieser Anwendung kann man mit einem einfachen USB TV-Stick alle Amateurfunk Frequenzen abhören. Inzwischen wurde das Projekt zwar eingestellt, doch Jakob DD5JFK hat einen Forke aufgesetzt. Das Programm wird von ihm weiterentwickelt und programmiert. Es gibt auch ein komplettes Raspberry Image zum Download. Erreichbar ist das neue Projekt unter der Webseite :
https://www.openwebrx.de/ 

So sieht die Anwendung aus wenn diese erfolgreich gestartet ist und über den Browser aufgerufen wird.

openwebrx via apache reverse proxy
openwebrx im Browser

Wenn “openwebrx” auf dem Rasperry Pi installiert ist und läuft ist die Anwendung über folgende URL’s im eigens lokalen Netzwerk erreichbar:

  • http://openwebrx.local
  • http://openwebrx.local:8073

Nehmen wir folgende technischen Daten als Basis:

  • URL “openwebrx.local” lokale IP-Adresse 192.168.1.10
  • Apache Webserver IP-Adresse 192.168.1.20
  • Apache Webserver via  Internet erreichbar
  • DNS-Name “webserver.ddns.net” für Apache
  • Virtuelle Maschine mit installiertem Apache Webserver (Lokales Netzwerk)
  • Portfreigabe am Router zu Port 80 und 443
  • DNS-Eintrag z.B. bei www.noip.com

Dazu richten wir erst mal einen Virtuellen Host ein für den HTTP Port 80. Dazu erstellen wir eine Datei unter “/etc/apache2/site-avaliable/openwebrx.conf” mit folgenden Inhalt:

HINWEIS:

Wichtig ist hier dass der Port 8073 eingetragen wird und auch abschließende Trailing Slashes genutzt werden “http://xxxx/”. Es muss exakt wie es in der Konfiguration unter <Location> angegeben ist, eingetragen werden, sonst funktioniert der Webserver nicht und die Anwendung ist nicht erreichbar oder funktioniert nicht zu 100%. Auch die Datei “openwebrx.conf” in der Apache Konfiguration so benennen sonst funktionieren anschließende Shell Befehle nicht. Also bitte exakt nach Dokumentation vorgehen und nichts hinzufügen, nichts ändern und nichts weglassen. IP-Adressen und DNS-Namen dürfen natürlich geändert und müssen angepasst werden.

<VirtualHost *:80>
ServerName webserver.ddns.net
 

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/vhosts/openwebrx/htdocs

        ProxyPreserveHost On
        ProxyRequests Off
      
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

<Location /rx/>
  ProxyPass http://192.168.1.10:8073/
  ProxyPassReverse http://192.168.1.10:8073/
  RewriteEngine on
  RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
</Location>

<Location /rx/ws/>
  ProxyPass ws://192.168.1.10:8073/ws/
  ProxyPassReverse ws://192.168.1.10:8073/ws/
  RewriteEngine on
  RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
</Location>

</VirtualHost> 

Dann müssen im Apache Webserver ein paar Module und Konfigurationen aktiviert und geladen werden:

sudo a2enmod proxy_wstunnel 
sudo a2enmod proxy 
sudo a2enmod proxy_balancer 
sudo a2enmod proxy_connect 
sudo a2enmod proxy_http 
sudo a2ensite openwebrx
sudo service apache2 restart

Eine letzte Änderung auf dem Raspberry Pi wegen openwebrx in der Datei :
“etc/openwebrx/config_webrx.py”

server_hostname = "webserver.ddns.net/rx/"
sudo service openwebrx restart

Das sollte alles gewesen sein und der Raspberry Pi mit openwebrx unter “http://webserver.ddns.net/rx/” erreichbar sein. Wenn alles richtig und korrekt eingetragen ist, steht dem Spaß nichts mehr im Weg.
Diese Konfiguration dient auch als Beispiel für viele andere Webanwendungen, wie zB. owncloud, nextcloud, Alfresco CMS, JITIS Videoserver, NodeRED, Smarthome, IoT Anwendungen usw. Also eigentlich alles was einen eigenen Port hat kann so in dieser Form an einen bestehenden Webserver angebunden werden.

Hier ein Beispiele wie es aussehen könnte mit einem oder mehrere virtuelle Webserver:

  1. Internet Router <-> Webserver:80 <-> Anwendung openwebrx <-> Location /rx
  2. Internet Router <-> Webserver:80 <-> Anwendung smarthome <-> Location /smarthome
  3. Internet Router <-> Webserver:80 <-> Anwendung nodered <-> Location /red
  4. Internet Router <-> Webserver:443 <-> Anwendung openwebrx <-> Location /rx
  5. Internet Router <-> Webserver:443 <-> Anwendung smarthome <-> Location /smarthome
  6. Internet Router <-> Webserver:443 <-> Anwendung nodered <-> Location /red
  7. Internet Router <-> Smarthome:443 <-> Anwendung smarthome <-> Location /smarthome
  8. Internet Router <-> Smarthome:443 <-> Anwendung nodered <-> Location /red

Weitere Namensbeispiele zum trennen von Anwendungen.

Trick: hier werden ebenfalls keine weitere Portfreigaben benötigt sondern wird nur die einzige bereits existierende Portfreigabe genutzt.

  • webserver.ddns.net
  • openwebrx.ddns.net
  • smarthome.ddns.net

Schlußwort:

Die ganze Sache hat einen riesigen Vorteil, es muss nicht für jede neue Anwendung eine eigene Freischaltung auf den Internet Router eingetragen werden. Es benötigt genau eine einzige Portfreischaltung und zwar die zum Apache Webserver mit Port 80 und 443 für SSL/TLS Verschlüsselung. Als DNS-Provider benutze ich https://www.noip.com/, damit kann ich bis zu 25 verschiedene DNS-Namen einrichten (Bezahlaccount) und somit auf den Webserver mehrere virtuelle Server entsprechend der Anwendung aufbauen.

Dieses Video ansehen auf YouTube.

Wünsche viel Spaß beim basteln und bei Fragen wie immer die Kommentarfunktion unter dem Artikel nutzen.

Beste Grüße , Joachim

Joachim HummelMein Name ist Joachim Hummel, aus Leidenschaft für Technik. Aktuelle Themen sind Datensicherheit, Software für Datenschutz, Mobile Geräte, Smartphone Sicherheit und Anwendungen, Raspberry Pi Geek. – > Eine Spende für den Blogautor <--

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.