Modifique as páginas HTML retornadas pelo proxy reverso nginx

9

Eu tenho uma configuração de proxy reverso para acessar um aplicativo de terceiros localizado dentro de uma intranet da Internet. Digamos que esse aplicativo esteja no URL:

https://internalserver:8080/ (acessível apenas na 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/ eles recebem 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 está tentando localizar a página com seu nome interno, por exemplo,  %código% ao invés de   https://internalserver:8080/somepage .

Eu sei que isso é um bug do programa, mas não consigo modificar o programa.

Posso interceptar a resposta, modificar as URLs e enviá-la (modificada) para o cliente final com nginx? Ou talvez com outra ferramenta?

EDITAR: vi essa questão antes, mas meu caso é mais específico, a pergunta citada pede uma modificação genérica. Nesse caso, o programa fast-cgi ad hoc é 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 strong e comprovada no mundo real, para este cenário.

    
por PCJ 10.08.2015 / 21:00

2 respostas

10

Este é um vídeo oficial do Nginx no YouTube que demonstra a reescrita de conteúdo em linha.

link

De fato, com o sub_filter

link

No seu caso, você está olhando para algo como:

location / {
sub_filter_once off;
sub_filter_types text/html;
sub_filter "https://internalserver:8080" "https://proxyserver";
}
    
por 11.08.2015 / 14:50
2

link

The ngx_http_sub_module module is a filter that modifies a response by replacing one specified string by another.

This module is not built by default, it should be enabled with the --with-http_sub_module configuration parameter.

Example Configuration

sub_filter      </head>
    '</head><script language="javascript" src="$script"></script>';
    
por 10.08.2015 / 23:17