Wir sollten zuerst die Dokumentation zu proxy_pass sorgfältig und vollständig lesen .
Der an den Upstream-Server übergebene URI wird basierend darauf bestimmt, ob die Direktive "proxy_pass" mit dem URI verwendet wird oder nicht. Ein abschließender Schrägstrich in der Anweisung proxy_pass bedeutet, dass der URI vorhanden und gleich ist /
. Der Unsinn eines abschließenden Schrägstrichs bedeutet, dass keine URI vorhanden ist.
Proxy_pass mit URI :
location /some_dir/ {
proxy_pass http://some_server/;
}
Mit dem oben genannten gibt es den folgenden Proxy:
http:// your_server/some_dir/ some_subdir/some_file ->
http:// some_server/ some_subdir/some_file
Grundsätzlich /some_dir/
wird ersetzt durch /
, um den Anforderungspfad von /some_dir/some_subdir/some_file
nach zu ändern /some_subdir/some_file
.
Proxy_pass ohne URI :
location /some_dir/ {
proxy_pass http://some_server;
}
Mit dem zweiten (kein abschließender Schrägstrich): Der Proxy sieht folgendermaßen aus:
http:// your_server /some_dir/some_subdir/some_file ->
http:// some_server /some_dir/some_subdir/some_file
Grundsätzlich wird der vollständige ursprüngliche Anforderungspfad ohne Änderungen weitergegeben.
In Ihrem Fall sollten Sie also einfach den abschließenden Schrägstrich fallen lassen, um das zu erhalten, was Sie möchten.
Vorbehalt
Beachten Sie, dass das automatische Umschreiben nur funktioniert, wenn Sie in proxy_pass keine Variablen verwenden. Wenn Sie Variablen verwenden, sollten Sie sich selbst neu schreiben:
location /some_dir/ {
rewrite /some_dir/(.*) /$1 break;
proxy_pass $upstream_server;
}
Es gibt andere Fälle, in denen das Umschreiben nicht funktioniert. Deshalb ist das Lesen der Dokumentation ein Muss.
Bearbeiten
Wenn Sie Ihre Frage noch einmal lesen, habe ich möglicherweise übersehen, dass Sie nur die HTML-Ausgabe bearbeiten möchten.
Dafür können Sie die Direktive sub_filter verwenden . Etwas wie ...
location /admin/ {
proxy_pass http://localhost:8080/;
sub_filter "http://your_server/" "http://your_server/admin/";
sub_filter_once off;
}
Grundsätzlich die Zeichenfolge, die Sie ersetzen möchten, und die Ersatzzeichenfolge
sub_filter "http://localhost/" "http://localhost/admin/"
text/html
Mimetyp zu ermöglichen, musste ich auch hinzufügensub_filter_types *;
.http://your_server/admin/
,http://your_server
während des proxy_pass aufgelöst zu werden, aber dies ist nicht der Fall und ich erhalte einen Fehlerreact-router /admin/ location did not match any routes
in meiner Anwendung, da meine Anwendung nichts über '/ admin' weiß.proxy_redirect
Direktive hinzufügen, damit derLocation
von der Antwort gesendete Header entsprechend der URL geändert wird. Schauen Sie sich dieses Tutorial an: cyberciti.biz/faq/…Möglicherweise muss vor Backupservern mit Datenkomprimierung vor dem ersten "sub_filter" die folgende Anweisung festgelegt werden:
Andernfalls funktioniert es möglicherweise nicht. Für Ihr Beispiel sieht es so aus:
quelle
Sie können das folgende Nginx-Konfigurationsbeispiel verwenden:
quelle
proxy_redirect off;
. Auch würde ich hinzufügenproxy_set_header X-Forwarded-Proto $scheme;
.