[gelöst] FHEMWEB Reverse Proxy funktioniert nicht mehr 100%

Begonnen von eiten, 13 Februar 2018, 19:14:21

Vorheriges Thema - Nächstes Thema

eiten

Hallo zusammen,
seit ca. 1 Woche läuft mein Apache Reverse Proxy nicht mehr 100%. Oben auf der Webpage wird immer angezeigt, dass die Verbindung unterbrochen wurde. Hat sich da was an FHEMWEB geändert? Die Konfig schaut so aus:
<Location /fhem>
        ProxyPass http://localhost:8083/fhem
        ProxyPassReverse http://localhost:8083/fhem

        AuthType Basic
        AuthName "Password Required"
        AuthUserFile /etc/fhem.htpasswd
        Require valid-user
        Order deny,allow
        Allow from all
</Location>


Hat jemand eine Idee?

Danke und Gruss, Edi

Edit: Gelöst hinzugefügt, Tippfehler im Titel korrigiert

CoolTux

#1
Du musst websocket für Deine Proxyressource konfigurieren.
Alternativ stelle die entsprechende FHEMWEB Instanz mit longpool Attribut auf 1
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

eiten

Danke dir. Ich habe mod_proxy_wstunnel jetzt aktiviert. Nur wie ich den Proxy konfigurieren soll, ist mir etwas schleierhaft. Die Adresse ist ja bis auf den Protokollanteil gleich... also einmal https://..., und das wird ja wunderbar zu http://localhost umgeleitet. Wie bringe ich aber nun Apache dazu, aus dem wss://... ein ws:// zu machen?

Danke und Gruss, Edi

CoolTux

Ich weiß leider nicht ob das mit dem wss oder ws so klappt. Ich habe nginx und da einfach 2-3 Zeilen für websocket hinzugefügt.
Da müsste dann Mal ein Indianerfachmann ran.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

Seit kurzem wird bei einem Aufruf via Chrome die longpoll Voreinstellung (d.h. falls es nicht explizit gesetzt wurde) auf websocket gesetzt, da der aktuellen Chrome mit "longpoll 1" bei vielen Leuten sehr traege wird, vmtl. ist das ein Chrome Bug.
Falls du auch Chrome verwendest, dann waere "attr WEB longpoll 1" ein Versuch, damit wird explizit HTTP longpolling bestellt.

eiten

Hallo zusammen.

Vielen Dank für eure Antworten, ich wurde dadurch in die richtige Richtung geschubbst. Was mich gewundert hat, ist dass der direkte Zugriff mit Chrome über http://ipadresse:8083 wunderbar funktioniert hat, nicht aber über den reverse Proxy. Ich hab's dank dem Stichwort Websockets und dem FHEM-Forum hingekriegt. Die Lösung brachte https://forum.fhem.de/index.php/topic,67271.msg587573.html#msg587573.
Zur Referenz, meine Konfig schaut nun so aus und funktioniert perfekt:
<Location /fhem>
        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 http://localhost:8083/fhem
        ProxyPassReverse http://localhost:8083/fhem
        ProxyHTMLURLMap /       /fhem/
        ProxyHTMLURLMap /fhem/  /fhem/
        AuthType Basic
        AuthName "Password Required"
        AuthUserFile /etc/fhem.htpasswd
        Require valid-user
        Order deny,allow
        Allow from all
</Location>


Danke euch allen!

kadettilac89

Zitat von: CoolTux am 13 Februar 2018, 19:42:26
Ich weiß leider nicht ob das mit dem wss oder ws so klappt. Ich habe nginx und da einfach 2-3 Zeilen für websocket hinzugefügt.

Hi CoolTux,

sind das die Zeilen in Nginx, die auch im Wiki enthalten sind ... s. u. Codeblock? Oder gibt es andere empfohlene Werte?

Thx!


      #if ($http_upgrade = "websocket") {
      #  set $my_http_upgrade $http_upgrade;
      #  set $my_connection "upgrade";
      #}


CoolTux

Ich habe da was anderes, aber auch nur weil ich einfach im Web nach nginx und websocket gesucht habe.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net


olili

Ich bin seit dem letzten Update auch von den Verbindungsabbrüchen mit Caddy als ReverseProxy betroffen.
Long Poll = 1 erzeugt Hängenbleiber. Daher habe ich wieder abgeschaltet.

Hat jemand eine Config für Caddy um die Websocket-Problematik in den Griff zu bekommen?

O.

heikoh81



Hallo zusammen,

ich bin für die Erweiterung meines Apache-Reverse-Proxies so vorgegangen wie hier beschrieben.
attr WEB longpoll websocket
und in /etc/apache2/sites-available/000-default-le-ssl.conf

<Location /fhem>
  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 http://localhost:8083/fhem
    ProxyPassReverse http://localhost:8083/fhem

  ProxyHTMLURLMap /        /fhem/
  ProxyHTMLURLMap /fhem/     /fhem/

    AuthType Basic
    AuthName "Password Required"
    AuthUserFile /etc/apache2/.htpasswd
    Require user Nexus4 Nexus5 wheider heikoadmin Kindle8GB
    Order deny,allow
    Allow from all
</Location>


Leider erhalte ich bei Zugriff über die Web-Schnittstelle trotzdem weiterhin:
"Connection lost, trying a reconnect every 5 seconds."
Interaktive Änderungen im Interface werden auch nur noch nach reload der Seite abgebildet.

Zugriff über http://192.168.178.230:8083/fhem? ist auch mit attr WEB longpoll websocket in Ordnung.

Stelle ich attr WEB longpoll 1, ist die "Connection lost"-Warnung über den Reverse Proxy weg.
Allerdings hängt auf dem  localhost (d.h. Aufruf von WEB direkt über Chromium auf dem Raspi durch http://localhost:8083/fhem?) das Öffnen von FHEM-Web manchmal komplett (aber nicht immer).
Von anderen PCs im LAN ist aber jederzeit Zugriff auf http://192.168.178.230:8083/fhem? möglich.

Dieses Hängen auf dem localhost ist für mich auch der Grund für das Bemühen, longpoll websocket zum Laufen zu bekommen.

Viele Grüße,
Heiko

diddle

#11
OK, ist schon älter. Aber bei Suchen nach FHEM longpoll und Apache httpd als Reverse Proxy stösst man hier drauf... daher noch zur Vollständigkeit.

Üblicherweise reicht genau dies hier:

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]
ProxyPassReverse /fhem http://localhost:8083/fhem


Man lädt dazu mod_proxy, mod_proxy_http, mod_proxy_wstunnel und mod_rewrite.

Wichtig ist natürlich, dass die Config da eingetragen wird, wo sie auch gezogen wird...
ich lese oben "sites-available", muss bei Debian-ähnlichen Apaches aber unter "sites-enabled" liegen.

Gruß
Diddle