Hallo,
da meine FHEM-Umgebung immer umfangreicher wird und immer mehr "Sicherheitsrelevante" Geräte dazu kommen (Bewegungsmelder, Türöffner, etc.) wurde es langsam Zeit, den Webzugriff mit SSL abzusichern.
Mit Hilfe dieser Anleitung:
https://wiki.fhem.de/wiki/HTTPS-Absicherung_%26_Authentifizierung_via_nginx_Webserver (https://wiki.fhem.de/wiki/HTTPS-Absicherung_%26_Authentifizierung_via_nginx_Webserver)
war das eigentlich kein großes Problem und alles klappte recht gut!
Bis auf eine Kleinigkeit: Die Statusänderungen bekommt weder die FHEM-WebGUI noch die TabletUI ohne einen Reload der Seite mit.
Ich habe mittlerweile vermutlich alle alten Threads im Forum und alle Tips durch. Ohne Erfolg...
Hier meine aktuelle minimal-Konfiguration:
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name fhem;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert.key;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/fhem.access.log;
location /fhem {
proxy_pass http://localhost:8083/fhem;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_buffering off;
proxy_ignore_client_abort off;
break;
}
}
Nach viel Herumprobieren habe ich longpoll auf "1" gesetzt, da bei "websocket" (hatte ich eigentlich vorher) , ständig die Meldung "Retry to connect in 5 seconds" kam.
Das Problem mit der Statusaktualisierung bleibt unabhängig davon...
Was mache ich falsch?!
Danke + Gruß
Peter
Also ich habe dort einiges anders stehen:
location /fhem {
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
# if ($http_upgrade = "websocket") {
# set $my_http_upgrade $http_upgrade;
# set $my_connection "upgrade";
# }
# proxy_set_header Upgrade $my_http_upgrade;
# proxy_set_header Connection $my_connection;
proxy_pass http://<server>:8083;
proxy_read_timeout 90;
proxy_buffering off;
client_max_body_size 128M;
}
Das Auskommentierte (#) hatte ich mal drin, als ich auch Updateprobleme hatte. Da ich FHEM aber extern (normalerweise) nicht nutze, habe ich es für die Wartbarkeit auskommentiert.
Ob er aktuell Aktualisiert, weiß ich nicht.
attr WEB longpoll 1
Ist bei mir auch gesetzt.
Den basic Authentication Kram hatte ich auch drin (Passwortschutz), so wie auch den ganzen Rest (außer der "X-Forwarded"-Sachen).
In verschiedenen Kombinationen... Lieder ohne Erfolg.
Daher habe ich mich auch auf eine minimal-Konfig beschränkt - um das troubleshooting zu erleichtern.
hast Du folgendes mal mit in der Config gehabt?
proxy_buffering off;
Zitat von: Happy Fhem User am 24 August 2020, 18:28:31
hast Du folgendes mal mit in der Config gehabt?
proxy_buffering off;
Yup, ist sogar in der aktuellen Konfig noch drin, s.O.
Was mich wundert:
Du verwendest in Deiner Config die Variable "$http_upgrade", sie wird aber nirgendwo gesetzt!
AFAIK wird "$http_upgrade" aus dem http-Header übernommen und muss nicht explizit gesetzt werden.
Ich habe aber recht wenig Ahnung von nginx und lasse mich gerne eines Besseren belehren.
Diesen Teil der Konfig habe ich von hier:
https://wiki.fhem.de/wiki/FHEM_Tablet_UI_FAQ#Das_UI_zeigt_Status.C3.A4nderungen_erst_nach_Neuladen_der_Seite_im_Browser (https://wiki.fhem.de/wiki/FHEM_Tablet_UI_FAQ#Das_UI_zeigt_Status.C3.A4nderungen_erst_nach_Neuladen_der_Seite_im_Browser)
Stimmt ... mein fail.
Setzte testweise bitte auch:
proxy_set_header Connection upgrade;
Das klappt! Ein voller (teil)Erfolg! :)
Das setzten von proxy_set_header Connection upgrade;
scheint das Update-Problem bei Tabelt-UI zu lösen, vielen Dank für den Tipp!
Seltsamerweise hat das aber keine Auswirkung auf FHEMWEB, da wird der Status immer noch erst bei einem Reload der Seite aktualisiert. :o
Wobei Du jetzt das Flag immer setzt, besser wäre der "ifblock" in meiner Config (s.o.). Der ist aber Auskommentiert, also dort die "#" entfernen.
Hier mal meine aktuelle conf, mit der es zumindest bei FHEMWEB schön aktualisiert:
Zitat
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 80 default_server;
listen [::]:80 default_server;
return 301 https://$host$request_uri;
}
server {
# listen 443 ssl spdy;
listen 443 ssl;
# listen [::]:443 ssl spdy;
listen [::]:443 ssl;
server_name debian;
ssl_certificate /usr/local/nginx/conf/ssl/server.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/server.key;
#ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
#ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA;
ssl_prefer_server_ciphers on;
#access_log deaktiviert wegen zu vieler Eintraege durch FHEM ;
#access_log /var/log/nginx/access.log;
access_log /dev/null;
error_log /var/log/nginx/error.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8086;
proxy_read_timeout 2073600;
proxy_buffering off;
auth_basic "FHEM Zugang Passwortgeschuetzt";
auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
# proxy_redirect http://localhost:8086 https://localhost;
}
}
}
Außerdem mußte ich in FHEMWEB noch setzen:
longpollSVG 1
plotEmbed 1
plotfork 1
refresh 0
longpollSVG ist immer noch experimentell (und bleibt es vermutlich auch).
"refresh 0" ist Voreinstellung (will sagen, man muss es nicht spezifizieren)
statt "plotEmbed 1/plotfork 1" empfehle ich "plotEmbed 2", sollte sich besser mit f18 vertragen.
Vielen Dank für die zahlreichen Tipps!
Nach vielem herumprobieren habe ich mit folgenden Einstellungen einen halbwegs "erträglichen" Zustand erreicht:
location / {
...
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
...
}
Damit klappt das Aktualisieren in TabletUI problemlos.
Aktualisierung in FHEMWEB habe ich leider nicht hinbekommen :( aber da FTUI meine primäre GUI ist, werde ich damit wohl leben müssen.