NginX trailing slash in der proxy-url übergeben
Ich weiß, dass diese Frage gestellt wurde mehrere Male, aber nach einem Versuch, eine Menge von Lösungen, ich bin immer noch stecken.
Ich bin mit NginX als proxy pass zu einem NodeJs-Anwendung. Ich bin versucht zu machen, url https://example.com
proxy übergeben Sie die Anforderung an http://example.com:8080/?
Anfragen (von einer mobile app) anfordern https://example.com//
die nginx macht http://example.com:8080//?
was nicht funktioniert.
Dinge, die ich versucht habe, die vorher nicht gearbeitet:
merge_slashes on;
(standardmäßig aktiviert)rewrite ^/(.*)/$ /$1 permanent;
port_in_redirect off;
Meine nginx config:
location = /a {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 300;
}
location ^~ /a/{
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 300;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie verwenden proxy_pass ohne URI. In diesem Fall nginx pass original-URI, wie es war, nicht normalisiert. So sollten Sie verwenden
proxy_pass http://backend/;
UPDATE
So, ich hatte Recht. Fügen Sie einfach die URI-Teil zu proxy_pass wie diese:
Wie gesagt in nginx-Dokumentation wenn
proxy_pass
ohne URI (d.h. ohne Pfad nach server:port) nginx setzen URI von der ursprünglichen Anfrage genau so, wie es war, mit allen doppelten Schrägstriche../
und so weiter.Auf der anderen Seite-URI in
proxy_pass
wirkt wiealias
Richtlinie bedeutet nginx ersetzen, Teil, der passt Speicherort-Präfix (in-out-Fall ist es/a
im ersten Lage und der/a/
ist die zweite) mit URI inproxy_pass
Richtlinie (die ich absichtlich gemacht, das gleiche wie Speicherort-Präfix), so URI wird die gleiche sein, wie angefordert, aber normalisiert (ohne doule Schrägstriche und alle, die Mitarbeiter). Vorsichtig sein mit trailing slashes. Nginx ersetzt einen Teil wörtlich und Sie könnten am Ende mit einigen seltsamen url.Hier ist ein Beispiel mit trailing slash in
location
, aber keine trailig Schrägstrich inproxy_pass
.wenn man zu Adresse
http://yourserver.com/one/path/here?param=1
nginx proxy Anfragehttp://127.0.0.1/twopath/here?param=1
. Sehen Sie, wietwo
undpath
verkettet.rewrite
Richtlinie einfach nicht passen.Könnten Sie fügen Sie diese Zeilen:
Beispiel, ich proxy öffentlichen port 80 auf den lokalen port 880
Hinweis: Stellen Sie sicher, dass nginx neu starten. Sie müssen möglicherweise verwenden Sie einen anderen browser zum testen der neuen Konfiguration (vermeiden cache)