Devemos primeiro ler a documentação sobre proxy_pass cuidadosa e completamente.
O URI passado para o servidor upstream é determinado com base em se a diretiva "proxy_pass" é usada com o URI ou não. A barra à direita na diretiva proxy_pass significa que o URI está presente e é igual a /
. Ausência de barra final significa que o URI do chapéu está ausente.
Proxy_pass com URI :
location /some_dir/ {
proxy_pass http://some_server/;
}
Com o acima, há o seguinte proxy:
http:// your_server/some_dir/ some_subdir/some_file ->
http:// some_server/ some_subdir/some_file
Basicamente, /some_dir/
é substituído por /
para alterar o caminho da solicitação de /some_dir/some_subdir/some_file
para /some_subdir/some_file
.
Proxy_pass sem URI :
location /some_dir/ {
proxy_pass http://some_server;
}
Com o segundo (sem barra): o proxy funciona assim:
http:// your_server /some_dir/some_subdir/some_file ->
http:// some_server /some_dir/some_subdir/some_file
Basicamente, o caminho completo da solicitação original é transmitido sem alterações.
Portanto, no seu caso, parece que você deve apenas deixar cair a barra final para obter o que deseja.
Embargo
Observe que a regravação automática só funciona se você não usar variáveis em proxy_pass. Se você usar variáveis, deve reescrever-se:
location /some_dir/ {
rewrite /some_dir/(.*) /$1 break;
proxy_pass $upstream_server;
}
Existem outros casos em que a reescrita não funcionaria, por isso é necessário ler a documentação.
Editar
Lendo sua pergunta novamente, parece que não percebi que você apenas deseja editar a saída html.
Para isso, você pode usar a diretiva sub_filter . Algo como ...
location /admin/ {
proxy_pass http://localhost:8080/;
sub_filter "http://your_server/" "http://your_server/admin/";
sub_filter_once off;
}
Basicamente, a string que você deseja substituir e a string de substituição
sub_filter "http://localhost/" "http://localhost/admin/"
text/html
tipo MIME, tive que adicionar tambémsub_filter_types *;
.http://your_server/admin/
ser resolvidohttp://your_server
durante o proxy_pass, mas isso não acontece e recebo um erroreact-router /admin/ location did not match any routes
no meu aplicativo porque meu aplicativo não sabe nada sobre '/ admin'.proxy_redirect
diretiva para que oLocation
cabeçalho enviado pela resposta também seja alterado de acordo com o url. Confira este tutorial: cyberciti.biz/faq/…Você também pode precisar que a seguinte diretiva seja definida antes do primeiro "sub_filter" para servidores de back-end com compactação de dados:
Caso contrário, pode não funcionar. Para o seu exemplo, será semelhante a:
fonte
Você pode usar o seguinte exemplo de configuração nginx:
fonte
proxy_redirect off;
embora. Também eu acrescentariaproxy_set_header X-Forwarded-Proto $scheme;
.