Apache2 als Reverse Proxy mit websocket für FHEM

Begonnen von klausw, 17 Februar 2017, 10:46:30

Vorheriges Thema - Nächstes Thema

Brause

also ich habe von nginx keine Ahnung, aber ein kurze suche bei google (nginx redirect websocket)  führte mich da hin:

https://www.nginx.com/blog/websocket-nginx/

also scheinbar  via node.js und dazu findest du hier auch was im Forum

h3llsp4wn

@mumpiz: Habe meine ngnix (kein Anspruch auf Ideallösung) in diesem Unterforum gelistet. Kannst ja mal schauen - ohne Mode.js

phil82

Hallo zusammen,

nach langer langer Suche und vielen Versuchen läuft jetzt auch mein Reverse Proxy mit Websocket unter Apache2.
Ich will das Thema hier nicht wieder aufwärmen, aber vielleicht hilft meine Lösung dem ein oder anderen.

Ich musste bei mir das Apache-Modul proxy_wstunnel aktiviert wird. Ohne das Modul startet zwar der Apache. Die websocket Aufrufe funktionieren aber nicht.
a2enmod proxy_wstunnel
service apache2 restart



Für "Tablet-UI" mit Websocket musste ich in der Header-Konfiguration vom Tablet-UI das WebDevice von FHEM definieren:
<meta name='web_device' content='guiWeb'>
Der Standardwert ist WEB. Bei Longpoll mit AJAX war das nie ein Problem, bei WebSocket schon.


Die Site-Config sieht bei mir genauso aus wie von klausw geschrieben:

        <Location /fhem>
                #Für Logpoll = Websocket die Aufrufe umleiten
                RewriteEngine On
                RewriteCond %{HTTP:Upgrade} =websocket [NC]
                RewriteRule /fhem(.*)           ws://localhost:8083/fhem$1 [P,L]
                RewriteCond %{HTTP:Upgrade} !=websocket [NC]
                RewriteRule /fhem(.*)           http://localhost:8083/fhem$1 [P,L]

                # ProxyPass/ProxyPassReverse leitet HTTP requests auf eine andere URL um
                ProxyPass http://localhost:8083/fhem
                ProxyPassReverse http://localhost:8083/fhem
                ProxyHTMLEnable On

                # ProxyHTMLURLMap passt Links im HTML/JavaScript Source an
                ProxyHTMLURLMap /        /fhem/
                ProxyHTMLURLMap /fhem/     /fhem/
              ......
        </Location>

Wichtig ist auch hier, dass die RewriteRule nicht "/fhem/" heißen, sondern nur "/fhem".
FHEM nutzt als WebSocket URL "https://fhemserver:xxxx/fhem?XHR=1&inform=type..." und da sind kleine "/" mehr.



Ich hab zwischenzeitlich meine gesamte Apache-Konfiguration zerschossen, da ich auf den folgenden Hinweis im Wiki "reingefallen" bin:
ln -s /etc/apache2/mods-available/proxy_html.conf /etc/apache2/mods-enabled/proxy_html.conf
Bei mir darf ich die Verlinkung nicht durchführen.
Mit der proxy_html.conf funktioniert der gesamte Reverse Proxy nicht mehr. So ganz verstanden hab ich das aber nicht.


Vielleicht helfen die Hinweise dem ein oder anderen



Wernieman

Eigentlich (laut Doku) muß man mod_proxy aktivieren, da proxy_wstunnel darauf anbaut ...
https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html

Aber wenn es funktioniert ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html