Hallo,
ich habe mich nun endlich aufgerafft und einen reverse proxy mittels nginx vor fhem geschaltet.
Dafür habe ich die nginx-Konfiguration aus dem Wiki https://wiki.fhem.de/wiki/HTTPS-Absicherung_&_Authentifizierung_via_nginx_Webserver verwendet.
Dies funktioniert mittlerweile grundsätzlich auch, nur erhalte ich nun keine Statusänderungen mehr. Wenn ich z.B. auf einen Schalter klicke, schaltet sich das entsprechende Gerät zwar ein, aber das Lampensymbol auf der Webseite zeigt immer noch "aus" an.
Greife ich direkt auf diese fhemWeb-Instanz zu, funktioniert es einwandfrei. Ich vermute deswegen einen Fehler in der Konfiguration von nginx.
Ist dies ein bekanntes Problem bei der Konfiguration aus dem Wiki oder habe ich da einen Fehler eingebaut?
server {
listen 8080 ssl;
server_name fhempi;
# check user agent
if ($http_user_agent ~* '(iPhone|iPod|Opera Mini|Android.*Mobile|NetFront|PSP|BlackBerry|Windows Phone)') {
set $ua_type "@mobile";
}
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 / {
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;
# Gehe zu FHEMWEB wenn kein mobiler Browser
if ($ua_type != "@mobile"){
proxy_pass https://127.0.0.1:8088;
}
# Gehe zu FHEMWEB smallscreen wenn mobiler Browser
if ($ua_type = "@mobile"){
proxy_pass https://127.0.0.1:8088;
}
proxy_read_timeout 90;
#proxy_read_timeout 20736000;
#proxy_buffering off;
# User Sickboy's Erweiterung für verschlüsselte Websocket-Kommunikation (siehe Diskussionsseite)
# Für normale Benutzer derzeit kommentiert, vom Autor Andremotz noch bisher ungetestet
# ... daher derzeit auskommentiert
# Wird für 'longpoll' benötigt (z.B. bei FTUI)
#set $my_http_upgrade "";
#set $my_connection "Connection";
#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;
auth_basic "Login required";
auth_basic_user_file /etc/nginx/.htpasswd;
# proxy_redirect http://localhost:8083 https://localhost;
}
}
Ciao
MiK
Hi,
bei mir funktioniert das....aber der entscheidende Unterschied...keine Ahnung.
Meine Konfig:
location /fhem {
proxy_pass http://rp2.fritz.box:8083/fhem;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_buffering off;
proxy_ignore_client_abort off;
break;
}
Vielen Dank! Ich habe folgendes von Dir übernommen:
proxy_set_header Upgrade $http_upgrade;
proxy_buffering off;
proxy_ignore_client_abort off;
Damit geht es. Weitere Tests haben ergeben, dass es an dieser einen Zeile liegt:
proxy_buffering off;
Keine Ahnung, warum das im Wiki auskommentiert ist.
Warum hast Du die ganzen "if" drin, wenn Du bei allen den gleichen Parameter verwendest?
Ich würde Dir empfehlen, die config zu "clearen"
Ich habe vor in Zukunft doch wieder für Mobil-Clients etwas anderes auszuliefern. Im Moment habe ich da aber noch ein kleines Problem damit. Deswegen habe ich die Unterscheidung erst einmal drin gelassen.
Ansonsten ist das eben mehr oder weniger 1:1 der Config-Vorschlag aus dem Wiki.