NGINX mit Subdir Locations

Es bietet sich an, mit Hilfe des NGINX Reverse Proxies Unterverzeichnisse als http://server/subdir auf andere Server http://App-server/ und die dortigen Applikationen umzuleiten.

Damit die dortigen Apps aber die richtigen Links in weiterführenden Webseiten erzeugen, muss die Anwendung wissen, dass sie ja von aussen betrachtet in einem Unterverzeichnis subdir laufen. Dazu haben viele diese Apps eine eigene Environment- Variable im Dockerfile, welche diese Information enthält

  environment:
    ...
    ME_CONFIG_SITE_BASEURL: /mongoexpress/

Nun kommt es aber zumindest bei Mongo-Express vor, dass die App erwartet, das der aufrufende URL auch dieses Unterverzeichnis wiedergibt. In der Standard- Konfiguration schnippelt NGINX aber das Unterverzeichnis subdir ab

http://server/subdirhttp://app-server/

und Mongo-Express fühlt sich falsch angesprochen und liefert statt der Website nur eine nichtssagende 404- Fehlermeldung

(viele Stunden später…)

Irgendwann wurde dann klar, wie man die NGINX- Config schreiben muß, damit die richtige Referer- URL auch beim Appserver ankommt.

http://server/subdir -> http://app-server/subdir

Der Trick liegt darin, beim proxy_pass das Unterzeichnis mit anzuhängen. Das sieht für mongoexpress dann so aus:

        # be careful: do not use a trialing slash fpr mongo-express! https://github.com/mongo-express/mongo-express/issues/146#issuecomment-329531989
        location  /mongoexpress {
                allow all;
                proxy_read_timeout 6000s;
                # rewrite ^/mongoexpress(.*)$ $1 break;
                proxy_pass http://10.33.12.156:8081/mongoexpress;
                proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
                proxy_buffering off;
                proxy_set_header        Host            $host;
                proxy_set_header        X-Real-IP       $remote_addr; # Remote IP durchreichen
                # proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

        }