Ich weiß, dass diese Frage schon mehrmals gestellt wurde, aber nachdem ich viele Lösungen versucht habe, stecke ich immer noch fest.
Ich benutze NginX, um Proxy an eine NodeJs-Anwendung zu übergeben. Ich versuche, URL https://example.com
Proxy die Anfrage an http://example.com:8080/?
Anfragen (von einer mobilen App) fordern https://example.com//
an, was nginx http://example.com:8080//?
macht, was nicht funktioniert.
Dinge, die ich versucht habe, die nicht funktioniert haben:
merge_slashes on;
(ist standardmäßig aktiviert) rewrite ^/(.*)/$ / permanent;
port_in_redirect off;
Meine nginx-Konfiguration:
%Vor% Ich nehme an, dass Sie proxy_pass ohne URI verwenden. In diesem Fall übergibt nginx den ursprünglichen URI wie er war, nicht normalisiert. Also sollten Sie proxy_pass http://backend/;
AKTUALISIEREN
Also hatte ich Recht. Fügen Sie einfach den URI-Teil zu proxy_pass wie folgt hinzu:
%Vor% Wie in der nginx Dokumentation angegeben, wenn proxy_pass
ohne URI verwendet wird (dh ohne Pfad nach Server: Port), wird nginx den URI setzen von der ursprünglichen Anfrage genau so, wie es bei allen doppelten Schrägstrichen war, ../
und so weiter.
Auf der anderen Seite verhält sich der URI in proxy_pass
wie die alias
-Direktive, dh nginx ersetzt den Teil, der mit dem Ort übereinstimmt Präfix (in out case ist es /a
in der ersten Position und /a/
ist die zweite) mit URI in proxy_pass
Direktive (was ich absichtlich dasselbe gemacht habe wie das Präfix), so wird URI wie angefordert, aber normalisiert (ohne doule Schrägstriche und all das Personal). Seien Sie vorsichtig mit Schrägstrichen. Nginx ersetzt Teil wörtlich und Sie könnten mit einer seltsamen URL enden.
Hier ist ein Beispiel mit einem Schrägstrich in location
, aber kein Trailig-Schrägstrich in proxy_pass
.
Wenn man zur Adresse http://yourserver.com/one/path/here?param=1
nginx geht, wird die Proxy-Anfrage an http://127.0.0.1/twopath/here?param=1
gesendet. Sehen Sie, wie two
und path
verkettet.