A única solução que encontrei até agora é o HttpSubsModule (veja também o github page ).
O módulo não faz parte das fontes oficiais do Nginx, então você provavelmente precisará construir o Nginx para usar este módulo.
Esta é uma continuação da minha pergunta anterior sobre como Fazer o proxy reverso nginx 302 redirecionar para uma subpasta de URI em vez de raiz .
Eu tenho um servidor proxy nginx que usa as diretivas rewrite
e proxy_pass
para fazer proxy de solicitações externas para uma URL como https://domain.com/my/web/app/
para um servidor da LAN interno em https://10.0.0.22/
. Aqui está minha tentativa de representar a tradução em UML ASCII:
.-------------. .------------------.
| Nginx proxy | | Local web server |
| (domain.com) | | (10.0.0.22) |
'-------------' '------------------'
| |
| |
GET https://domain.com/my/web/app/ ----------->| |
|---------------->| GET /
| |
|<----------------| 302 redirect /login.php
302 redirect /my/web/app/login.php <-----------| |
| |
GET https://domain.com/my/web/app/login.php -->| |
|---------------->| GET /login.php
| |
|<----------------| 200
HTML body content (images, CSS, links) <-------|
Aqui está o bloco de localização real no meu arquivo de configuração nginx:
location ^~ /my/web/app/
{
proxy_buffering off;
rewrite /my/web/app/(.*) /$1 break;
proxy_pass https://10.0.0.22/;
proxy_redirect default;
}
Funciona muito bem para a conversão de URI entre os caminhos URI internos e externos para solicitações e respostas HTTP, mas quaisquer URIs no conteúdo HTML (imagens do corpo, CSS, scripts) não são traduzidos.
Por exemplo, imagens com caminhos relativos incorporados na resposta HTML, com URIs como /images/logo.png, são passadas de volta para o Web client e interpretadas como https://domain.com/images/logo.png
em vez de https://domain.com/my/web/app/images/logo.png
.
Eu posso entender por que isso está acontecendo, mas seria maravilhoso se houvesse uma maneira de dinamicamente proxy de conteúdo, bem como solicitações. Existe uma maneira de obter o nginx para converter também URIs incorporados no conteúdo HTML? É possível analisar dinamicamente e atualizar o conteúdo HTML à medida que ele passa pelo servidor proxy?
A única solução que encontrei até agora é o HttpSubsModule (veja também o github page ).
O módulo não faz parte das fontes oficiais do Nginx, então você provavelmente precisará construir o Nginx para usar este módulo.
Tags nginx reverse-proxy