NginX abschließender Schrägstrich in der Proxy-Pass-URL

8

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/?

übergeben

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%     
Pratyay Modi 31.03.2014, 10:34
quelle

1 Antwort

11

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/;

verwenden

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 .

%Vor%

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.

    
Alexey Ten 31.03.2014 10:45
quelle

Tags und Links