62
задан 17 March 2017 в 12:28

3 ответа

Мы должны сначала читать документация относительно 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;
}

В основном, строка Вы хотите заменить и замещающая строка

88
ответ дан 31 October 2019 в 14:06

Вам, возможно, также понадобится следующая директива, которая будет установлена перед первым "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;
}
16
ответ дан 31 October 2019 в 14:06

Можно использовать следующий 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;
}
0
ответ дан 31 October 2019 в 14:06

Другие вопросы по тегам:

Похожие вопросы: