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

Offline heikoh81

  • Sr. Member
  • ****
  • Beiträge: 573
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: 5521
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