Esta é uma continuação da minha pergunta anterior sobre como fazer o proxy reverso nginx 302 redirecionar para uma subpasta URI em vez de raiz .
Eu tenho um servidor proxy nginx que usa as diretivas rewrite
e proxy_pass
para proxy de solicitações externas para um URL como https://domain.com/my/web/app/
um servidor LAN interno em https://10.0.0.22/
. Aqui está minha tentativa de representar a tradução em ASCII UML:
.-------------. .------------------.
| 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;
}
Ele funciona muito bem na tradução de URI entre os caminhos interno e externo de URI para solicitações e respostas HTTP, mas quaisquer URIs no conteúdo HTML (imagens corporais, 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 transmitidas de volta ao cliente da Web e interpretadas como em https://domain.com/images/logo.png
vez de https://domain.com/my/web/app/images/logo.png
.
Entendo por que isso está acontecendo, mas seria maravilhoso se houvesse uma maneira de proxy de conteúdo e solicitações dinamicamente. Existe uma maneira de fazer com que o nginx também converta URIs incorporados no conteúdo HTML? É possível analisar e atualizar dinamicamente o conteúdo HTML à medida que ele passa pelo servidor proxy?
fonte
Respostas:
A única solução para isso que encontrei até agora é o HttpSubsModule (veja também a página do github ).
O módulo não faz parte das fontes oficiais do Nginx, portanto você provavelmente precisará criar o Nginx para usar este módulo.
fonte