Modificar páginas HTML retornadas pelo proxy reverso nginx


17

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.


1
possível duplicação de dados
Cristian Ciupitu

Respostas:



3

http://nginx.org/en/docs/http/ngx_http_sub_module.html

O módulo ngx_http_sub_module é um filtro que modifica uma resposta substituindo uma sequência especificada por outra.

Este módulo não é construído por padrão, deve ser ativado com o parâmetro de configuração --with-http_sub_module.

Exemplo de configuração

sub_filter      </head>
    '</head><script language="javascript" src="$script"></script>';
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.