Ich habe Probleme, meinen Reverse-Proxy zum Laufen zu bringen, wenn ich einen Pfad in nginx verwende. Ich versuche, eine Adresse für eine Anwendung zu haben und die Umgebung mit dem Pfad zu bestimmen. Je nach Pfad würde er auf einen anderen Server verweisen. Ich kann den Reverse-Proxy zum Laufen bringen, wenn ich einen direkten Link verwende, aber bei Verwendung eines Pfads tritt ein 404-Fehler auf.
app.foo.bar/dev = 404 Fehler devapp.foo.bar = Erfolg
Was habe ich bei app.foo.bar/dev falsch gemacht?
Hier ist das Reverse-Proxy-Setup, das funktioniert, das ich aber lieber nicht verwenden möchte:
server {
listen 80; # DEV Application Proxy
server_name devapp.foo.bar;
location / {
proxy_pass http://appserver.foo.bar:7010;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
port_in_redirect off;
proxy_redirect http://appserver.foo.bar:7010/ /;
proxy_connect_timeout 300;
}
}
Hier ist ein Teil dessen, was ich mithilfe des Pfads tun möchte, aber einen 404-Fehler erhalte.
# APP Environment Proxy
server {
listen 80;
server_name app.foo.bar;
location /dev {
proxy_pass http://appserver.foo.bar:7010;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
port_in_redirect off;
proxy_redirect http://appserver.foo.bar:7010 /;
proxy_connect_timeout 300;
}
}
Ich habe diese Art von Setup gegoogelt, aber ich kann keine Lösung finden. Vielen Dank im Voraus für jede Hilfe.
Antwort1
Wenn Sie haben proxy_pass http://appserver.foo.bar:7010;
, hängt nginx die normalisierte URI an die Anforderungs-URL an, die an das Backend übergeben wird.
Wenn Sie also anfordern http://app.foo.bar/dev
, geht die Anforderung an http://appserver.foo.bar:7010/dev
. Wenn Ihr Dev-Server diesen Pfad nicht hat, wird 404 zurückgegeben, die nginx an den Client zurückgibt.
Wenn Sie möchten, dass alle Anfragen, die mit beginnen, http://app.foo.bar/dev
an gehen http://appserver.foo.bar:7010
, sodass der gesamte Rest der URI zur URI des Backend-Servers hinzugefügt wird, können Sie diese Konfiguration verwenden:
location ~ ^/dev(.+)$ {
proxy_pass http://appserver.foo.bar:7010$1$is_args$args;
...
}
Also erfassen wir den nachfolgenden Teil /dev
mit einem regulären Ausdruck in einer Variablen und fügen diese Variable dann am Ende des proxy_pass
Pfads hinzu.