Autor Thema: Apache2 als Reverse Proxy mit websocket für FHEM  (Gelesen 1906 mal)

Offline klausw

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1521
Apache2 als Reverse Proxy mit websocket für FHEM
« am: 17 Februar 2017, 10:46:30 »
Hallo zusammen,

ich nutze den Apache als Reverse Proxy für 2 FHEM Instanzen und FTUI (PHP).
Als Basis habe ich die Konfiguration aus dem Wiki verwendet.
Jetzt würde ich gern websockets nutzen.

Dazu habe ich noch die Zeilen
  ProxyPass ws://localhost:8082/fhem
  ProxyPassReverse ws://localhost:8082/fhem
ergänzt.

Nur leider klappt das so nicht.

websockets über den Apache Proxy funktioniert grundsätzlich. Ich nutze es bereits für NodeRed.

Hat es hier schon einer hinbekommen?

RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Online h3llsp4wn

  • Full Member
  • ***
  • Beiträge: 184
Antw:Apache2 als Reverse Proxy mit websocket für FHEM
« Antwort #1 am: 17 Februar 2017, 10:57:56 »
Hi,

schau mal hier - ggf. sind es die rewrite rules, die Dir fehlen:

https://forum.fhem.de/index.php/topic,66879.60.html

Offline klausw

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1521
Antw:Apache2 als Reverse Proxy mit websocket für FHEM
« Antwort #2 am: 17 Februar 2017, 16:19:56 »
Danke für den Tip,

habe die Rules eingebaut

/etc/apache2/sites-available/fhem.conf :
<Location /fhem>

  RewriteEngine On
  RewriteCond %{HTTP:Upgrade} =websocket [NC]
  RewriteRule /fhem/(.*)           ws://localhost:8082/fhem/$1 [P,L]
  RewriteCond %{HTTP:Upgrade} !=websocket [NC]
  RewriteRule /fhem/(.*)           http://localhost:8082/fhem/$1 [P,L]

  # Websockets
  ProxyPass ws://localhost:8082/fhem
  ProxyPassReverse ws://localhost:8082/fhem

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

  # ProxyHTMLURLMap passt Links im HTML/JavaScript Source an
  ProxyHTMLURLMap /        /fhem/
  ProxyHTMLURLMap /fhem/     /fhem/
  AuthType Basic
  AuthName "Password Required"
  AuthUserFile /etc/fhem-htpasswd
  Require user klaus
  Order deny,allow
  Allow from all
</Location>

Funktioniert leider nicht wie erhofft.

Die Firefox Konsole zeigt folgendes:

16:16:50.482 ERRMSG:<  fhemweb.js:363:5
16:16:50.583 Inform-channel opened (websocket) with filter   fhemweb.js:363:5
GET
https://mein.dynvpn.de:8443/fhem/ [HTTP/1.1 407 Proxy Authorization Required 4ms]
GET
https://mein.dynvpn.de:8443/fhem/ [HTTP/1.1 200 Connection Established 154ms]
Firefox kann keine Verbindung zu dem Server unter wss://mein.dynvpn.de:8443/fhem/?XHR=1&inform=type=status;filter=;since=1487344583;fmt=JSON&fw_id=884&timestamp=1487344610579 aufbauen.  fhemweb.js:897:18
16:16:50.730 ERRMSG:Connection lost, trying a reconnect every 5 seconds.<

Ich greife über TLS auf den Apache zu. Der Port wird vom Router auf die 8443 umgemapped. Das Pi selbst ist im lokalen Netz über Port 443 erreichbar.
Das TLS läuft über die default-ssl.conf.
Muss wss nochmal speziell behandelt werden?
« Letzte Änderung: 17 Februar 2017, 16:30:02 von klausw »
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Offline klausw

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1521
Antw:Apache2 als Reverse Proxy mit websocket für FHEM
« Antwort #3 am: 17 Februar 2017, 21:13:27 »
So funktioniert es:

<Location /fhem>

  RewriteEngine On
  RewriteCond %{HTTP:Upgrade} =websocket [NC]
  RewriteRule /fhem(.*)           ws://localhost:8082/fhem$1 [P,L]
  RewriteCond %{HTTP:Upgrade} !=websocket [NC]
  RewriteRule /fhem(.*)           http://localhost:8082/fhem$1 [P,L]

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

  # ProxyHTMLURLMap passt Links im HTML/JavaScript Source an
  ProxyHTMLURLMap /        /fhem/
  ProxyHTMLURLMap /fhem/     /fhem/
  AuthType Basic
  AuthName "Password Required"
  AuthUserFile /etc/fhem-htpasswd
  Require user klaus
  Order deny,allow
  Allow from all
</Location>

Die "/" hinter FHEM waren zuviel
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280
Informativ Informativ x 1 Liste anzeigen

Offline Brause

  • Jr. Member
  • **
  • Beiträge: 84
Antw:Apache2 als Reverse Proxy mit websocket für FHEM
« Antwort #4 am: 18 Februar 2017, 14:07:25 »
Darauf muss man aber auch erstmal kommen.
Ich habe mir hier auch schon den Wolf nach einer Lösung gesucht,
auch mit dieser Rule.

Was eine Stich so alles aus macht.
Nach dem ich dann nun auch mein FHEMWEB-Device nach "WEB" umbenannt habe, klappt's auch ohne Fehlermeldungen in der Konsole.

Daumen hoch.
Danke

Gruss Brause
FHEM auf NUC, HomeMatic, Netatmo, IT una.

Offline klausw

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1521
Antw:Apache2 als Reverse Proxy mit websocket für FHEM
« Antwort #5 am: 18 Februar 2017, 19:26:56 »
Nach dem ich dann nun auch mein FHEMWEB-Device nach "WEB" umbenannt habe, klappt's auch ohne Fehlermeldungen in der Konsole.

welche Fehlermeldungen meinst du?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Offline Brause

  • Jr. Member
  • **
  • Beiträge: 84
Antw:Apache2 als Reverse Proxy mit websocket für FHEM
« Antwort #6 am: 18 Februar 2017, 21:58:34 »

Die Fehlermeldung ist diese:

https://forum.fhem.de/index.php/topic,66879.msg587505.html#msg587505

wenn es im FHEMWEB ein Device gibt das "WEB" heisst  und ein Attr "longpoll" hat das auf "websocket" steht, funktioniert der ganze Spass ohne Meldung in der Console.

Bei mir hiessen die alle WEB_xxx.
Naja jetzt gibt es wieder ein "WEB"
FHEM auf NUC, HomeMatic, Netatmo, IT una.

Offline klausw

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1521
Antw:Apache2 als Reverse Proxy mit websocket für FHEM
« Antwort #7 am: 18 Februar 2017, 23:22:47 »
Ah ok, die Meldung kam bei mir nicht. Allerdings funktioniert die Websocket Verbindung im Zusammenhang mit FTUI bei mir nicht ordentlich.

Es kommt:
Longpoll (Websocket) started
Nach einer Weile 4 Meldungen:
FHEM connected
Disconnected from FHEM
Retry to connect in 10s
Foll refresh done in 0.8s for 244 parameter(s)

Readings werden auch nicht sofort aktualisiert. Das dauert ewig.

Läuft deine FTUI über HTTPSRV oder hast du es anderweitig gelöst?

EDIT:

Habe die Ursache gefunden

« Letzte Änderung: 18 Februar 2017, 23:55:22 von klausw »
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Offline Brause

  • Jr. Member
  • **
  • Beiträge: 84
Antw:Apache2 als Reverse Proxy mit websocket für FHEM
« Antwort #8 am: 19 Februar 2017, 07:27:50 »
Ja die Meldung hatte ich als der Proxy noch nicht richtig konfiguriert war bzw das "WEB" nicht vorhanden war bzw attr longpoll nicht auf websocket stand.

Das meta "fhemweb_url" habe ich bei mir nicht gesetzt, da ich im Endeffekt 4 Wege habe über die ich zugreifen könnte.

und bis jetzt hat FTUI immer die richtige URL von alleine gefunden.
FHEM auf NUC, HomeMatic, Netatmo, IT una.

Offline drhirn

  • Sr. Member
  • ****
  • Beiträge: 533
Antw:Apache2 als Reverse Proxy mit websocket für FHEM
« Antwort #9 am: 22 Februar 2017, 09:19:22 »
Kurze Frage: Wie müsste das aussehen, wenn FHEM nicht auf dem selben Server, wie Apache installiert ist? ProxyPass ist klar, aber die Rewrite-Rules?

Danke!
Stefan

Offline klausw

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1521
Antw:Apache2 als Reverse Proxy mit websocket für FHEM
« Antwort #10 am: 22 Februar 2017, 10:53:21 »
Kurze Frage: Wie müsste das aussehen, wenn FHEM nicht auf dem selben Server, wie Apache installiert ist? ProxyPass ist klar, aber die Rewrite-Rules?

Bei denen sollte es das gleiche sein (muss ich selbst noch umbauen)

localhost:8082 -> <ip>:<port>
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Offline drhirn

  • Sr. Member
  • ****
  • Beiträge: 533
Antw:Apache2 als Reverse Proxy mit websocket für FHEM
« Antwort #11 am: 22 Februar 2017, 16:04:41 »
Funktioniert bei mir nur, wenn ich die RewriteCond "!=websocket" weglasse. Aber deren Sinn ist mir ja sowieso nicht ganz klar.

Offline klausw

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1521
Antw:Apache2 als Reverse Proxy mit websocket für FHEM
« Antwort #12 am: 23 Februar 2017, 23:33:51 »
Funktioniert bei mir nur, wenn ich die RewriteCond "!=websocket" weglasse. Aber deren Sinn ist mir ja sowieso nicht ganz klar.

So richtig durchgestiegen bin ich bei dem ganzen proxy Kram sowieso nicht. Vermutlich wird es benötigt um von Websocket wieder auf die Ajax Variante zu gehen wenn mit den Websockets irgendwas nicht funktioniert.
Es kann aber genauso gut überflüssig sein.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Offline Brause

  • Jr. Member
  • **
  • Beiträge: 84
Antw:Apache2 als Reverse Proxy mit websocket für FHEM
« Antwort #13 am: 24 Februar 2017, 06:40:25 »
das ist praktisch eine Anfrage-Weiche.

Ist die Anfrage an /fhem ein websocket (=) dann schicke es mit Präfix ws://
ist es irgendetwas anderes (also kein websocket !=) dann schicke es mit Präfix http://

FHEM auf NUC, HomeMatic, Netatmo, IT una.

Offline Mumpitz

  • Full Member
  • ***
  • Beiträge: 189
Antw:Apache2 als Reverse Proxy mit websocket für FHEM
« Antwort #14 am: 24 Februar 2017, 06:46:13 »
Hallo zusammen

Ich weiss nicht ob ich mit meiner Frage den Thread kappere, aber ihr als Spezialisten könnt mir allenfalls weiterhelfen:

Wisst ihr zufällig wie nginx für die Websockets anfragen unkonfiguriert werden muss?

 

decade-submarginal