Ответ 1
Сначала мы должны внимательно и полностью прочитать документацию по proxy_pass.
URI, передаваемый вышестоящему серверу, определяется на основе того, используется ли директива proxy_pass с URI или нет. Конечная косая черта в директиве proxy_pass означает, что URI присутствует и равен /
. Отсутствие косой черты означает, что URI отсутствует.
Proxy_pass с URI:
location /some_dir/ {
proxy_pass http://some_server/;
}
С учетом вышеизложенного существует следующий прокси:
http:// your_server/some_dir/ some_subdir/some_file ->
http:// some_server/ some_subdir/some_file
По сути, /some_dir/
заменяется на /
для изменения пути запроса с /some_dir/some_subdir/some_file
на /some_subdir/some_file
.
Proxy_pass без URI:
location /some_dir/ {
proxy_pass http://some_server;
}
Со вторым (без косой черты): прокси выглядит так:
http:// your_server /some_dir/some_subdir/some_file ->
http:// some_server /some_dir/some_subdir/some_file
По сути, полный исходный путь запроса передается без изменений.
Итак, в вашем случае кажется, что вы должны просто бросить косую черту, чтобы получить то, что вы хотите.
Предостережение
Обратите внимание, что автоматическая перезапись работает, только если вы не используете переменные в proxy_pass. Если вы используете переменные, вы должны переписать себя:
location /some_dir/ {
rewrite /some_dir/(.*) /$1 break;
proxy_pass $upstream_server;
}
Есть другие случаи, когда перезапись не работает, поэтому чтение документации является обязательным.
редактировать
Читая ваш вопрос еще раз, я, возможно, пропустил, что вы просто хотите отредактировать вывод html.
Для этого вы можете использовать директиву sub_filter. Что-то вроде...
location /admin/ {
proxy_pass http://localhost:8080/;
sub_filter "http://your_server/" "http://your_server/admin/";
sub_filter_once off;
}
В основном, строка, которую вы хотите заменить, и строка замены