nginx SSL-Proxy: Keine Statusaktualisierung

Begonnen von peter-s, 24 August 2020, 14:59:56

Vorheriges Thema - Nächstes Thema

peter-s

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
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

Wernieman

#1
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.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

peter-s

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.


Happy Fhem User

hast Du folgendes mal mit in der Config gehabt?

proxy_buffering         off;

peter-s

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.

Wernieman

Was mich wundert:
Du verwendest in Deiner Config die Variable "$http_upgrade", sie wird aber nirgendwo gesetzt!
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

peter-s

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

Wernieman

Stimmt ... mein fail.

Setzte testweise bitte auch:
        proxy_set_header      Connection upgrade;
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

peter-s

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

Wernieman

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.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

fiedel

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
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

rudolfkoenig

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.

peter-s

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.