Eu gostaria de usar o Nginx como um proxy reverso para um aplicativo, que é mapeado para um subdiretório do meu site. O aplicativo tem seu próprio conjunto de locais e deve poder emitir redirecionamentos para outros locais dentro do aplicativo, mas o aplicativo não está ciente de que está mapeado para um subdiretório do site principal.
Por exemplo: https://example.com/app/page1
deve ser passado para http://the_app/page1
. Além disso, se o aplicativo emitir um redirecionamento para /page2
, o Nginx deverá modificar o local na resposta para https://example.com/app/page2
.
Aqui está minha configuração atual:
upstream the_app {
server 127.0.0.1:8000;
}
. .
rewrite /app /app/ break;
location ~/app(?<app_path>/.*$) {
proxy_pass http://the_app$app_path;
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-Proto $scheme;
}
Isso encaminha solicitações para o aplicativo com o caminho correto (por exemplo, http://app/page1
), mas não gerencia redirecionamentos corretamente. Quando o aplicativo emitir um redirecionamento para /page2
, o navegador será redirecionado para https://example.com/page2
(em vez de .../app/page2
). Então, quando o navegador solicita o novo local, ele não é enviado para o aplicativo, então ele retorna uma página 404 ou arbitrária do site principal.
Eu tentei sugestões dadas como respostas para perguntas parecidas, mas nenhuma delas fez com que redirecionamentos fossem tratados dessa maneira.
Isso é possível com o Nginx? Se sim, como isso pode ser feito? Ou talvez exista uma maneira melhor de fazer isso?
Tags redirect nginx reverse-proxy