Eu tenho uma configuração de proxy reverso para acessar um aplicativo de terceiros localizado dentro de uma intranet da Internet. Digamos que este aplicativo esteja no URL:
https://internalserver:8080/
(acessível apenas a partir da intranet)
e o proxy está ativado:
https://proxyserver/
(acessível de qualquer lugar do mundo)
O proxy é gerenciado pelo nginx e está funcionando bem. Quando o usuário acessa https://proxyserver/
, obtém o conteúdo do aplicativo em https://internalserver:8080/
.
O problema é que o aplicativo está gravando URLs absolutos na resposta HTML. Assim, quando o usuário clica em um link para uma nova página, o navegador tenta localizar a página com seu nome interno, por exemplo, em
https://internalserver:8080/somepage
vez de
https://proxyserver/somepage
.
Eu sei que isso é um bug do programa, mas não consigo modificar o programa.
Posso interceptar a resposta, modificar os URLs e enviá-la (modificada) para o cliente final com nginx? Ou talvez com outra ferramenta?
EDIT: Eu já vi essa pergunta antes, mas meu caso é mais específico, a pergunta citada pede uma modificação genérica. Nesse caso, o programa ad-hoc fast-cgi é a melhor solução, o que eu quero é uma solução mais específica para (eu acho) um cenário mais comum. enquanto um programa fast-cgi pode funcionar, estou procurando uma solução mais fácil e talvez mais forte e comprovada no mundo real, para esse cenário.
fonte
Respostas:
Aqui está um vídeo oficial do Nginx no YouTube que demonstra a reescrita de conteúdo em linha.
https://youtu.be/7Y7ORypoHhE?t=20m22s
De fato, com sub_filter
http://nginx.org/en/docs/http/ngx_http_sub_module.html
No seu caso, você está olhando para algo como:
fonte
http://nginx.org/en/docs/http/ngx_http_sub_module.html
fonte