Nginx - Umleitung an unerwünschten Standort mit abschließendem Schrägstrich

Nginx - Umleitung an unerwünschten Standort mit abschließendem Schrägstrich

Ich habe einen Standort

location /pass/ {
    proxy_pass http://localhost:12345/;
}

Es soll also URLs weiterleiten http://example.com/pass/whateveranhttp://localhost:12345/whatever

Was mir nicht gefällt, ist, dass nginx automatisch Schrägstriche anfügt

http://example.com/pass

und macht es http://example.com/pass/per 301-Weiterleitung

Wie kann ich dieses Verhalten einfach vermeiden. Ich möchte /passohne abschließenden Schrägstrich an eine andere Stelle gelangen. Vielen Dank im Voraus!

Antwort1

Es gibt einen Sonderfall, bei dem ein proxy_passmit der locationEndung „in“ /zu einer automatischen impliziten Weiterleitung ohne Umleitung zum Backend führen würde 301. Um dies zu vermeiden, müssen Sie eine explizite Weiterleitung locationohne abschließenden Schrägstrich erstellen:

Wenn ein Standort durch eine Präfixzeichenfolge definiert ist, die mit einem Schrägstrich endet, und Anforderungen von einem der folgenden Verfahren verarbeitet werden: proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass oder grpc_pass, wird die spezielle Verarbeitung ausgeführt. Als Antwort auf eine Anforderung mit einer URI, die dieser Zeichenfolge entspricht, jedoch ohne den abschließenden Schrägstrich, wird eine permanente Umleitung mit dem Code 301 an die angeforderte URI mit angehängtem Schrägstrich zurückgegeben. Wenn dies nicht gewünscht ist, kann eine genaue Übereinstimmung von URI und Standort wie folgt definiert werden:

location /user/ {
    proxy_pass http://user.example.com;
}

location = /user {
    proxy_pass http://login.example.com;
}

Beispielsweise müssen Sie /pass locationzusätzlich zu dem vorhandenen ein explizites erstellen /pass/, andernfalls location /pass {return 301 /pass/…;}wird ein implizites für Sie erstellt.

Sind Sie jedoch sicher, dass Sie das, was Sie versuchen, wirklich tun möchten? Wenn Sie eine Umleitung von /passnach weglassen /pass/, funktionieren relative Pfade nicht. Einige neuere Browser neigen auch dazu, fehlerhafte UI/UX aufzuweisen, die dem Benutzer möglicherweise den abschließenden Schrägstrich nicht anzeigen, was die Dinge beim Versuch, den Unterschied zu beheben, noch verwirrender machen kann.

Antwort2

Wie Sie möchten, dass es gehtein anderer Ort, ist eine natürliche Lösung, diesen Standort hinzuzufügen

location /pass {
}

Standardmäßig sucht nginx im Webstamm nach einer Datei namens „pass“. Wenn Ihnen diese Vorgabe nicht gefällt, können Sie in diesem neuen Standortblock weitere Anweisungen hinzufügen, um dies zu erreichen.

Sie können auch verwenden

location = /pass {
}

sodass Nginx die Übereinstimmung etwas schneller finden kann.

verwandte Informationen