[gelöst] SmartVisu über zwei NGINX

Begonnen von Saphora, 12 September 2021, 23:11:54

Vorheriges Thema - Nächstes Thema

Saphora

Hallo,
hat von euch jemand SmartVisu über zwei NGINX aktiv?
Möchte gern SmartVisu von extern über NGINX darstellen.
SmartVisu selbst wird über einen eigenen NGINX betrieben.
Mein NGINX für das Internet läuft aber auf einem anderen Server.
Daher würde ich gern vom Internet NGINX zum SmartVisu NGINX weiterleiten.
Das klappt auch soweit, dass SmartVisu angezeigt wird.
Aber es sind keine Werte sichtbar (Values, Button On/off...).
Im Fronthem ist die IP des Internet NGINX hinterlegt, aber das Fronthem Device m FHEM bleibt auf disconnected.
Am SmartVisu NGINX kommen die Anfragen mit der IP des Internet NGINX an, die auch als Fronthem Device angelegt ist.

Kennt jemand das Problem?

Martin

Wernieman

Du verwendest also NGINX als Reverse-Proxy für den Internen Webserver (NGINX)

- Kannst Du uns bitte die Config des Reverse-Proxys geben?
- Der Interen Webserver funktioniert wie gewünscht?

Kenne jetzt SmartVisu nicht genau, aber bei FHEM selber würde ich Dir raten, Testweise mal LongPoll zu aktivieren
- 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

Saphora

ja NGINX als interner Webserver für Smartvisu.
Das funktioniert auch einwandfrei, wenn es direkt aufgerufen wird.
Kommt nun der zweite NGINX ins Spiel, wird nur die Smartvisu Seite angezeigt, aber FHEM liefert keine Werte usw.

Hier die Konfigurationen für den NGINX intern

server {
        listen 192.168.178.2:80;
        server_name 192.168.178.2;

        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                 try_files $uri =404;
                 fastcgi_split_path_info ^(.+\.php)(/.+)$;
                 fastcgi_pass unix:/run/php/php7.4-fpm.sock;
                 fastcgi_index index.php;
                 include fastcgi.conf;
                 fastcgi_read_timeout 600;
         }
}




Hier die Konfigurationen für den NGINX extern

upstream backend-smartvisu {
        server 192.168.178.2;
}

server {
        listen                meinedomain.de:443 ssl;
        server_name     meinedomain.de;

...
SSL
...

       location /smartvisu
                {
                proxy_pass http://backend-smartvisu;
                }
}

Wernieman

Habe jetzt meinen eigenen Nginx-Reverseproxy nicht im Zugriff, aber es fehlen so einige Parameter bei der location des Reverse-Proxys. Gibt dazu auch Threads im Forum. Suche mal nach nginx ....
- 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

Saphora

#4
Die folgenden Header sind gesetzt, bringen aber keinen Erfolg...

        proxy_http_version        1.1;
        proxy_set_header          Upgrade $http_upgrade;
        proxy_set_header          Host $host;
        proxy_set_header          X-Real-IP 192.168.178.3;                    #Setzt Client IP, wenn aus dem Internet kommt, da diese im Frothem zugelassen ist
        proxy_set_header          X-Forwarded-For 192.168.178.3;          #Setzt Client IP, wenn aus dem Internet kommt, da diese im Frothem zugelassen ist
        proxy_set_header          X-Forwarded-Proto $scheme;

Die SmartVisu Seite wird ohne Probleme angezeigt, aber im FHEM wird das Fronthem Device nicht als aktiv angezeigt.

herrmannj

Du brauchst auch websocket. Außerdem muss für jedes end-device eine unterschiedliche (individuelle) IP weitergeleitet werden.

Wernieman

Und zusätzlich nicht mit echten IPs, sondern mit Variablen arbeiten.


proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


Hinwies: Obiges aktuell nur apgetippt, Fehler können enthalten sein, da nicht getestet
- 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

Saphora

Zitat von: herrmannj am 14 September 2021, 22:25:46
Du brauchst auch websocket. Außerdem muss für jedes end-device eine unterschiedliche (individuelle) IP weitergeleitet werden.
Warum wird Websocket benötigt, wenn es über zwei NGINX geht? Mit der IP meinst du sicherlich das fronthemDevice?

Zitat von: Wernieman am 15 September 2021, 08:53:58
Und zusätzlich nicht mit echten IPs, sondern mit Variablen arbeiten.


proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


Hinwies: Obiges aktuell nur apgetippt, Fehler können enthalten sein, da nicht getestet
Das mit den Variablen kenne ich normalerweise auch so, dass die echte Client-IP zum Webserver weitergegeben wird. Nur wird in dem fronthemDevice fest vorgegeben welche IP die Werte sehen darf. ist wie ein Whitelisting. Beim Internetzugriff wäre so nicht möglich. Daher die IP des Reverse Proxy, um diese zuzulassen. So war zumindest meine Idee.

Wernieman

Websocket ist wichtig, da dadurch die Daten ermittelt werden. Im Normalfall verwendet nginx bei Proxy-Verbindungen keine websocket-Verbindung .. und damit ist auch klar, warum Du keine Daten empfängst ...
- 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

Saphora

So genau hatte ich mir die Kommunikation nicht angesehen.
Aber wenn ich es richtig verstehe, dann baut der Client eine Websocket Verbindung zu FHEM auf, um sich die Daten zu holen?
Bin davon ausgegangen, dass dies über SmartVisu passiert.
Im Webbrowser ist zu sehen, dass der Browser eine Direktverbindung zum FHEM aufbauen möchte, statt über NGINX.
Muss das irgendwo definiert bzw. angegeben werden, dass der Websocket über die Domain des Reverse Proxy aufgebaut werden soll und nicht direkt?

Saphora

Es war in der Tat der Websocket.
Habe die Kommunikation falsch angenommen.
Danke der Hinweise und Hilfe  :D