FHEM Forum

FHEM => Frontends => FHEMWEB => Thema gestartet von: peter-s am 24 August 2020, 14:59:56

Titel: nginx SSL-Proxy: Keine Statusaktualisierung
Beitrag von: peter-s am 24 August 2020, 14:59:56
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
Titel: Antw:nginx SSL-Proxy: Keine Statusaktualisierung
Beitrag von: Wernieman am 24 August 2020, 15:30:29
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.
Titel: Antw:nginx SSL-Proxy: Keine Statusaktualisierung
Beitrag von: peter-s am 24 August 2020, 16:24:38
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.

Titel: Antw:nginx SSL-Proxy: Keine Statusaktualisierung
Beitrag von: Happy Fhem User am 24 August 2020, 18:28:31
hast Du folgendes mal mit in der Config gehabt?

proxy_buffering         off;
Titel: Antw:nginx SSL-Proxy: Keine Statusaktualisierung
Beitrag von: peter-s am 24 August 2020, 20:05:25
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.
Titel: Antw:nginx SSL-Proxy: Keine Statusaktualisierung
Beitrag von: Wernieman am 25 August 2020, 07:46:20
Was mich wundert:
Du verwendest in Deiner Config die Variable "$http_upgrade", sie wird aber nirgendwo gesetzt!
Titel: Antw:nginx SSL-Proxy: Keine Statusaktualisierung
Beitrag von: peter-s am 25 August 2020, 07:57:41
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)
Titel: Antw:nginx SSL-Proxy: Keine Statusaktualisierung
Beitrag von: Wernieman am 25 August 2020, 08:38:48
Stimmt ... mein fail.

Setzte testweise bitte auch:
        proxy_set_header      Connection upgrade;
Titel: Antw:nginx SSL-Proxy: Keine Statusaktualisierung
Beitrag von: peter-s am 25 August 2020, 09:44:40
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
Titel: Antw:nginx SSL-Proxy: Keine Statusaktualisierung
Beitrag von: Wernieman am 25 August 2020, 10:36:02
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.
Titel: Antw:nginx SSL-Proxy: Keine Statusaktualisierung
Beitrag von: fiedel am 26 August 2020, 10:30:17
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
Titel: Antw:nginx SSL-Proxy: Keine Statusaktualisierung
Beitrag von: rudolfkoenig am 26 August 2020, 10:54:15
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.
Titel: Antw:nginx SSL-Proxy: Keine Statusaktualisierung
Beitrag von: peter-s am 27 August 2020, 20:53:03
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.