Мы должны сначала читать документация относительно proxy_pass тщательно и полностью.
URI, переданный вышестоящему серверу, определяется на основе того, используется ли "proxy_pass" директива с URI или нет. Запаздывающая наклонная черта в proxy_pass директиве означает, что URI присутствует и равен /
. Absense запаздывающей наклонной черты имеет в виду шляпу, 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
до [1 110].
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;
}
В основном, строка Вы хотите заменить и замещающая строка
Вам, возможно, также понадобится следующая директива, которая будет установлена перед первым "sub_filter" для серверов бэкэнда со сжатием данных:
proxy_set_header Accept-Encoding "";
Иначе это не может работать. Для Вашего примера это будет похоже:
location /admin/ {
proxy_pass http://localhost:8080/;
proxy_set_header Accept-Encoding "";
sub_filter "http://your_server/" "http://your_server/admin/";
sub_filter_once off;
}
Можно использовать следующий nginx пример конфигурации:
upstream adminhost {
server adminhostname:8080;
}
server {
listen 80;
location ~ ^/admin/(.*)$ {
proxy_pass http://adminhost/$1$is_args$args;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}