ReverseProxy zur FritzBox - nginx

Die dargestellte Konfiguration ermöglicht den Zugriff aus dem Internet auf die FritzBox über einen Gateway. Dabei kann das Gateway die Authentifizierung & Verifizierung der User übernehmen und alle unerwünschten Zugriffe ablehnen.

server {
        listen   80;
        server_name  myGateway.info;
        access_log /var/log/nginx/localhost.access.log;
        error_log  /var/log/nginx/localhost.error.log;
        location / {
                proxy_pass http://192.168.0.1; #select your IP from FritzBox
        }

Das ist wohl die einfachste Konfiguration die wir für den ReverseProxy verwenden können. Der Nachteil dabei ist wohl der Namensraum. Unter der Adresse ]http://myGateway.info ist dadurch nur die FritzBox erreichbar. Sollen parallel dazu noch weitere Applikationen über die selbe URL erreichbar sein müssen wir die conf Datei noch um ein paar Zeilen erweitern.

Nehmen wir an, dass die FritzBox über den Namensraum /fb/ erreicht werden soll. Die Herausforderung dabei ist wohl die FritzBox selbst. Mir ist leider keine Möglichkeit bekannt Einstellungen für die ausgegebenen Links der HTML Oberfläche in der Box ein zu stellen. Da für den User die Box stets über den Pfad /fb/ angesprochen wird, die Box aber davon ausgeht dass alle Dateien direkt über / erreicht werden können. Die Links zeigen dementsprechend stets auf / und werden über den Proxy so an den Enduser weiter gegeben. Der Versuch des Browsers die verlinkten Objekte über die / URL zu laden schlagen dementsprechend fehl.

Weiterhin leitet die Box bei dem Seitenaufruf den USER an unterschiedliche Adressen weiter, um zu prüfen ob eine Anmeldung bereits erfolgte.

Für die Lösung der beschriebenen Probleme sollte der "location" Abschnitt der KonfigDatei wie folgt angepasst werden:

location /fb {
        rewrite /fb/(.*) /$1 break;
        proxy_pass http://192.168.0.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host 'fritz.box';
        proxy_redirect http://fritz.box/ http://myGateway.info/fb/;
        sub_filter '"/' '"/fb/';
        sub_filter_once off;
}

Die "rewrite" Zeile entfernt den /fb/ präfix aus der Anfrage bevor diese URL an die FritzBox geschickt wird. Die Einstellung "proxy_redirect" kümmert sich um die richtige Weiterleitung der 30X redirects, und der "sub_filter" überschreibt alle Links von / auf /fb/, und das nicht nur für den ersten Treffer auf einer Seite sondern für alle Links (sub_filger_once). Die beiden "proxy_set_header" Einträge sorgen dafür, dass die Box über die richtige IP des Endusers informiert wird, und das der "Host" Header richtig gesetzt wird.


dis * Phl0W Einfacher und weniger fehleranfällig wäre eine Weiterleitung von / mittels Zuhilfename einer Subdomain, no? http://fb.myGateway.info/ ?