FHEM Forum

FHEM - Hardware => Server - Linux => Thema gestartet von: heikoh81 am 20 März 2019, 19:16:13

Titel: nginx reverse proxy: 2 verschiedene fhem-Instanzen erreichbar machen
Beitrag von: heikoh81 am 20 März 2019, 19:16:13
Hallo zusammen,

ich möchte über nginx reverse proxy 2 verschiedene fhem-Instanzen erreichbar machen.

Instanz 1 läuft auf dem Vserver, der auch als nginx reverse proxy fungiert (logDB).
==> http://www.xyz/fhem
==> funktioniert, siehe "location /fhem {"

Instanz 2 läuft auf einem Raspi, der über OpenVPN transparent vom Vserver erreichbar ist.
==> http://www.xyz.de/benutzer/fhem
==> funktioniert nicht, siehe "location /benutzer/fhem {"
==> es funktioniert auch nicht, wenn man "rewrite ^/benutzer/fhem?/(.*)$ /fhem?$1 last;" weglässt.

"location ^~ /benutzer/ {" liefert HTML/PHP-Dateien aus (IPCam-Bilder über PHP-Skript), die auf einem Apache2 auf Instanz 2 laufen
==> funktioniert auch hinter dem nginx-Reverse-Proxy.

Es passiert folgendes:
Wenn ich https://www.xyz.de/benutzer/fhem öffne, wird korrekt fhem von Instanz 2 geladen.
Aber alle fhem-Links lauten https://www.xyz.de/fhem, so dass ich dann natürlich automatisch wieder auf Instanz 1 lande.

Was ich bräuchte:
Für alle Browser-Aufrufe, die auf www.xyz.de/benutzer/fhem reinkommen, soll mein Reverse Proxy die fhem-links umschreiben, also von
https://www.xyz.de/fhem auf https://www.xyz.de/benutzer/fhem.
Denn wenn ich z.B. manuell https://www.xyz.de/benutzer/fhem?room=Bewegungsmelder aufrufe, lande ich im korrekten fhem-room.

Es könnte an den Prioritäten liegen, mit denen nginx die locations abarbeitet, aber ich sehe nicht, wo mein Fehler ist.
Oder an den RegEx, mit denen nginx die locations bearbeitet.

Nachfolgend meine nginx-config:
server {
    listen 443;
    server_name xyz.de www.xyz.de;

    root /var/www/xyz.de/html;
    index index.php index.html;


#####HEIKO 17.04.2018 Reverse Proxy fuer FHEM auf VServer Anfang#####
    location /fhem {
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;

proxy_pass          http://localhost:8083/fhem;

proxy_read_timeout  90;
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
    }

location ^~ /benutzer/ {
proxy_pass          http://192.168.178.230:8443/benutzer/;
proxy_buffering off;
expires off;
auth_basic "VServer Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd_benutzer;
}

location /benutzer/fhem {
proxy_pass          http://192.168.178.230:8083/;
rewrite ^/benutzer/fhem?/(.*)$ /fhem?$1 last;
proxy_buffering off;
expires off;
auth_basic "VServer Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd_benutzer;
}

    include /etc/nginx/templates/misc.tmpl;
    include /etc/nginx/templates/ssl.tmpl;
    include /etc/nginx/templates/iredadmin.tmpl;
    include /etc/nginx/templates/roundcube.tmpl;
    include /etc/nginx/templates/sogo.tmpl;
    include /etc/nginx/templates/netdata.tmpl;
    include /etc/nginx/templates/php-catchall.tmpl;

}


Wer kann mir helfen und sagen, wie die nginx-config richtig aussehen muss?
Vielen Dank,
viele Grüße,

Heiko
Titel: Antw:nginx reverse proxy: 2 verschiedene fhem-Instanzen erreichbar machen
Beitrag von: Wernieman am 21 März 2019, 08:30:03
Das Problem ist, das fhem selber alle Links mit /fhem zurückliefert. Eigentlich müsste man das konfigurierbar machen (weiß nur nicht, ob dieses bei FHEM konfigurierbar ist).

Ist ein grundsätzliches Problem von reverse-proxy-Lösungen (weshalb eben viele obiges konfigurierbar machen)

Du kannst aber mal probieren, am Ende vom proxy ein / zu machen:
location /benutzer/fhem/
Siehe:
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass (http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass)
https://stackoverflow.com/questions/32542282/how-do-i-rewrite-urls-in-a-proxy-response-in-nginx (https://stackoverflow.com/questions/32542282/how-do-i-rewrite-urls-in-a-proxy-response-in-nginx)
https://serverfault.com/questions/379675/nginx-reverse-proxy-url-rewrite (https://serverfault.com/questions/379675/nginx-reverse-proxy-url-rewrite)
Titel: Antw:nginx reverse proxy: 2 verschiedene fhem-Instanzen erreichbar machen
Beitrag von: heikoh81 am 20 September 2019, 15:56:21
Falls jemand über Google diese Frage findet:
Ich konnte das Problem mittlerweile so lösen, dass ich in fhem eine neue FHEMWEB-Instantz nur für diesen Zweck eingerichtet habe,
und dort das
attr webname benutzername/fhem
gesetzt habe.

Viele Grüße,
Heiko