Kein Websocket über Apache Reverse-Proxy mit Safari möglich

Begonnen von fabschub, 28 Juni 2018, 01:11:31

Vorheriges Thema - Nächstes Thema

fabschub

Hallo zusammen,

ich greife auf FHEMWEB über Reverse-Proxy zu und habe jetzt longpoll auf websocket umgestellt. Der entsprechenden Apache-Instanz habe ich hierfür mit den notwendigen Rewrite-Rules wie unter https://forum.fhem.de/index.php/topic,67271.msg587573.html#msg587573 beschrieben ausgestattet.

Leider kommt unter Safari keine Websocketverbindung zustande.
[Log] 23:36:36.987 Inform-channel opened (websocket) with filter room=Esszimmer (fhemweb.js, line 427)
[Error] WebSocket connection to 'wss://fhem.xxx.de/fhem?XHR=1&inform=type=status;filter=room=Esszimmer;since=1530133487;fmt=JSON&fw_id=162&timestamp=1530135396987' failed: Unexpected response code: 401
[Log] 23:36:37.001 ERRMSG:Connection lost, trying a reconnect every 5 seconds.< (fhemweb.js, line 427)
[Log] 23:36:41.903 ERRMSG:< (fhemweb.js, line 427)


Wenn ich direkt mit Safari auf fhem zugreife, besteht dieses Problem nicht.
[Log] 00:44:17.721 Inform-channel opened (websocket) with filter room=Esszimmer (fhemweb.js, line 427)
[Log] 00:44:17.732 Rcvd:  (fhemweb.js, line 427)
[Log] 00:44:23.878 FW_cmd:/fhem?cmd.EZ.Schranklicht_weiss_1=set EZ.Schranklicht_weiss_1 on&room=Esszimmer&room=Esszimmer&fwcsrf=csrf_1805276673043... (fhemweb.js, line 427)
[Log] 00:44:23.896 Rcvd: ["EZ.Schranklicht_weiss_1","set_on","<div id=\u0022EZ.Schranklicht_weiss_1\u0022  title=\u0022set_on\u0022 class=\u0022col2\u0022><a...(387) (fhemweb.js, line 427)
[Log] 00:44:23.899 Rcvd: ["EZ.Schranklicht_weiss_1-state","set_on","set_on"] (fhemweb.js, line 427)
[Log] 00:44:23.899 Rcvd: ["EZ.Schranklicht_weiss_1-state-ts","2018-06-28 00:44:23","2018-06-28 00:44:23"] (fhemweb.js, line 427)
[Log] 00:44:24.063 Rcvd: ["EZ.Schranklicht_weiss_1","on","<div id=\u0022EZ.Schranklicht_weiss_1\u0022  title=\u0022on\u0022 class=\u0022col2\u0022><a href=\u...(364) (fhemweb.js, line 427)
[Log] 00:44:24.064 Rcvd: ["EZ.Schranklicht_weiss_1-deviceMsg","on (to HMLANGW)","on (to HMLANGW)"] (fhemweb.js, line 427)
[Log] 00:44:24.065 Rcvd: ["EZ.Schranklicht_weiss_1-deviceMsg-ts","2018-06-28 00:44:24","2018-06-28 00:44:24"] (fhemweb.js, line 427)
[Log] 00:44:24.065 Rcvd: ["EZ.Schranklicht_weiss_1-level","100","100"] (fhemweb.js, line 427)
[Log] 00:44:24.065 Rcvd: ["EZ.Schranklicht_weiss_1-level-ts","2018-06-28 00:44:24","2018-06-28 00:44:24"] (fhemweb.js, line 427)
[Log] 00:44:24.065 Rcvd: ["EZ.Schranklicht_weiss_1-pct","100","100"] (fhemweb.js, line 427)
[Log] 00:44:24.065 Rcvd: ["EZ.Schranklicht_weiss_1-pct-ts","2018-06-28 00:44:24","2018-06-28 00:44:24"] (fhemweb.js, line 427)
[Log] 00:44:24.066 Rcvd: ["EZ.Schranklicht_weiss_1-state","on","on"] (fhemweb.js, line 427)
[Log] 00:44:24.066 Rcvd: ["EZ.Schranklicht_weiss_1-state-ts","2018-06-28 00:44:24","2018-06-28 00:44:24"] (fhemweb.js, line 427)
[Log] 00:44:24.066 Rcvd: ["EZ.Schranklicht_weiss_1-timedOn","off","off"] (fhemweb.js, line 427)
[Log] 00:44:24.066 Rcvd: ["EZ.Schranklicht_weiss_1-timedOn-ts","2018-06-28 00:44:24","2018-06-28 00:44:24"] (fhemweb.js, line 427)


Unter Firefox habe ich dieses Problem mit dem Reverse-Proxy nicht.
00:45:44.215 Inform-channel opened (websocket) with filter room=Esszimmer
fhemweb.js:427:5
00:45:44.801 Rcvd:
fhemweb.js:427:5
00:45:49.282 FW_cmd:/fhem?cmd.EZ.Schranklicht_weiss_1=set EZ.Schranklicht_weiss_1 off&room=Esszimmer&room=Esszimmer&fwcsrf=csrf_290218483863...
fhemweb.js:427:5
00:45:49.331 Rcvd: ["EZ.Schranklicht_weiss_1","set_off","<div id=\u0022EZ.Schranklicht_weiss_1\u0022  title=\u0022set_off\u0022 class=\u0022col2\u0022>...(393)
fhemweb.js:427:5
00:45:49.336 Rcvd: ["EZ.Schranklicht_weiss_1-state","set_off","set_off"]
fhemweb.js:427:5
00:45:49.337 Rcvd: ["EZ.Schranklicht_weiss_1-state-ts","2018-06-28 00:45:49","2018-06-28 00:45:49"]
fhemweb.js:427:5
00:45:49.490 Rcvd: ["EZ.Schranklicht_weiss_1","off","<div id=\u0022EZ.Schranklicht_weiss_1\u0022  title=\u0022off\u0022 class=\u0022col2\u0022><a href=...(369)
fhemweb.js:427:5
00:45:49.495 Rcvd: ["EZ.Schranklicht_weiss_1-deviceMsg","off (to HMLANGW)","off (to HMLANGW)"]
fhemweb.js:427:5
00:45:49.496 Rcvd: ["EZ.Schranklicht_weiss_1-deviceMsg-ts","2018-06-28 00:45:49","2018-06-28 00:45:49"]
fhemweb.js:427:5
00:45:49.496 Rcvd: ["EZ.Schranklicht_weiss_1-level","0","0"]
fhemweb.js:427:5
00:45:49.499 Rcvd: ["EZ.Schranklicht_weiss_1-level-ts","2018-06-28 00:45:49","2018-06-28 00:45:49"]
fhemweb.js:427:5
00:45:49.499 Rcvd: ["EZ.Schranklicht_weiss_1-pct","0","0"]
fhemweb.js:427:5
00:45:49.500 Rcvd: ["EZ.Schranklicht_weiss_1-pct-ts","2018-06-28 00:45:49","2018-06-28 00:45:49"]
fhemweb.js:427:5
00:45:49.501 Rcvd: ["EZ.Schranklicht_weiss_1-state","off","off"]
fhemweb.js:427:5
00:45:49.501 Rcvd: ["EZ.Schranklicht_weiss_1-state-ts","2018-06-28 00:45:49","2018-06-28 00:45:49"]
fhemweb.js:427:5
00:45:49.502 Rcvd: ["EZ.Schranklicht_weiss_1-timedOn","off","off"]
fhemweb.js:427:5
00:45:49.503 Rcvd: ["EZ.Schranklicht_weiss_1-timedOn-ts","2018-06-28 00:45:49","2018-06-28 00:45:49"]


Apache2-Konfiguration (Debian Jessie):
<IfModule mod_ssl.c>
<VirtualHost *:443>

ServerName fhem.xxx.de

ProxyRequests Off
# ProxyPass/ProxyPassReverse leitet HTTP requests auf eine andere URL um
ProxyPass / http://127.0.0.1:8083/ nocanon
ProxyPassReverse / http://127.0.0.1:8083/
# ProxyHTMLURLMap passt Links im HTML/JavaScript Source an
ProxyHTMLURLMap /        /fhem/
ProxyHTMLURLMap /fhem/     /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]

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

# Logging in extra Dateien
ErrorLog ${APACHE_LOG_DIR}/fhem-error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/fhem-access.log combined

SSLCertificateFile /etc/letsencrypt/live/fhem.xxx.de/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/fhem.xxx.de/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>


Safari habe ich in der aktuellen Version sowohl unter Mac wie auch auf dem iPhone getestet.

Was macht Safari anders, und gibt es einen Weg dieses Problem mittels Änderung der Konfiguration von Apache zu beheben?

Gruß

Fabian

fabschub

Ich war wohl auf dem Holzweg. Das Problem liegt nicht bei Apache. Bei meinen Tests mit Safari ohne Reverse-Proxy hatte ich keine Authentifizierung eingeschaltet. Schütze ich mein FHEMWEB-Instanz, so erhalte ich unter Safari auch keine Verbindung über Websocket. Ein Post von Rudi hierzu: https://forum.fhem.de/index.php/topic,71352.msg628777.html#msg628777

Es gibt also derzeit keine Lösung für Websocket mit Safari bei Verwendung von Basic Auth.

der_oBi

Hi zusammen,

offenbar scheint es trotz aktuellstem Safari auf macos und iOS nach wie vor nicht zu funktionieren.


Gibt es für das Problem mit dem Safari nach wie vor keine Lösung / workaround?

Auf macOS könnte ich statt Safari bspw. Firefox nutzen und alles funktioniert. Auf iPad/iPhone funktionieren leider auch die Third-Party-Browser nicht (wieso das eigentlich???). :-(

swiegmann

Hallo zusammen,

der Thread ist zwar schon etwas älter, aber mich würde interessieren, ob das Problem noch besteht.

Ich habe FHEM hinter einem Apache2 Reverse Proxy laufen.
Auf IOS bekomme ich im FHEM Web UI "Connection lost trying a reconnect every 5 seconds"

Mit Chrome (Windows) sowie Safari (Windows) funktioniert alles einwandfrei.
Gehe ich mit IOS direkt auf den FHEMWeb Server (am Proxy vorbei) funktioniert es.

Also liegt es anscheinend den der Kombination Safari/IOS und Proxy.

Viele Grüße

rudolfkoenig

Safari sendet ueber websocket nicht die "Authorization:.." Headerzeile, damit funktionert die von FHEMWEB verwendete Authorisierung bei der Kombination websocket/Safari nicht.
Ein weiteres Problem bei der Verwendung eines Proxies in diesem Zusammenhang ist mir nicht bekannt.

ZitatAuf iPad/iPhone funktionieren leider auch die Third-Party-Browser nicht (wieso das eigentlich???). :-(
Weil Apple auch bei Third-Party Browser die Verwendung des Apple HTML-Engines erzwingt.
Insofern sind Third-Party Browser unter iOS reine Kosmetik.

der_oBi

Zitat von: rudolfkoenig am 16 August 2019, 09:40:40
Weil Apple auch bei Third-Party Browser die Verwendung des Apple HTML-Engines erzwingt.
Insofern sind Third-Party Browser unter iOS reine Kosmetik.

Das hätte ich selbst nach wochenlanger Google-Recherche niemals rausgefunden.
Vielen Dank für die Erklärung, Rudi!

Sch**** Apple  ::)