Najpierw powinniśmy uważnie i w pełni przeczytać dokumentację dotyczącą proxy_pass .
Identyfikator URI przekazany do serwera nadrzędnego jest określany na podstawie tego, czy dyrektywa „proxy_pass” jest używana z identyfikatorem URI, czy nie. Końcowy ukośnik w dyrektywie proxy_pass oznacza, że identyfikator URI jest obecny i równy /
. Brak końcowego ukośnika oznacza brak identyfikatora URI.
Proxy_pass z URI :
location /some_dir/ {
proxy_pass http://some_server/;
}
W związku z powyższym istnieje następujący serwer proxy:
http:// your_server/some_dir/ some_subdir/some_file ->
http:// some_server/ some_subdir/some_file
Zasadniczo /some_dir/
zostaje zastąpiony przez, /
aby zmienić ścieżkę żądania z /some_dir/some_subdir/some_file
na /some_subdir/some_file
.
Proxy_pass bez URI :
location /some_dir/ {
proxy_pass http://some_server;
}
Z drugim (bez końcowego ukośnika): proxy wygląda tak:
http:// your_server /some_dir/some_subdir/some_file ->
http:// some_server /some_dir/some_subdir/some_file
Zasadniczo pełna oryginalna ścieżka żądania jest przekazywana bez zmian.
Więc w twoim przypadku wydaje się, że powinieneś po prostu porzucić końcowy ukośnik, aby uzyskać to, czego chcesz.
Caveat
Zauważ, że automatyczne przepisywanie działa tylko wtedy, gdy nie używasz zmiennych w proxy_pass. Jeśli używasz zmiennych, powinieneś przepisać siebie:
location /some_dir/ {
rewrite /some_dir/(.*) /$1 break;
proxy_pass $upstream_server;
}
Są inne przypadki, w których przepisywanie nie zadziała, dlatego czytanie dokumentacji jest koniecznością.
Edytować
Czytając ponownie twoje pytanie, wydaje mi się, że mogłem przegapić, że chcesz po prostu edytować wynik HTML.
W tym celu możesz użyć dyrektywy sub_filter . Coś jak ...
location /admin/ {
proxy_pass http://localhost:8080/;
sub_filter "http://your_server/" "http://your_server/admin/";
sub_filter_once off;
}
Zasadniczo ciąg, który chcesz zastąpić, i ciąg zastępujący