Autor Thema: nginx reverse proxy: 2 verschiedene fhem-Instanzen erreichbar machen  (Gelesen 520 mal)

Offline heikoh81

  • Sr. Member
  • ****
  • Beiträge: 576
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
« Letzte Änderung: 20 März 2019, 19:47:50 von heikoh81 »

Offline Wernieman

  • Hero Member
  • *****
  • Beiträge: 5562
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
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
« Letzte Änderung: 21 März 2019, 08:34:43 von Wernieman »
- 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

Offline heikoh81

  • Sr. Member
  • ****
  • Beiträge: 576
Antw:nginx reverse proxy: 2 verschiedene fhem-Instanzen erreichbar machen
« Antwort #2 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/fhemgesetzt habe.

Viele Grüße,
Heiko