Il s'agit d'une suite à ma question précédente sur la façon de rediriger le proxy inverse nginx 302 vers un sous-dossier URI au lieu de root .
J'ai un serveur proxy nginx qui utilise les directives rewrite
et proxy_pass
pour proxy des requêtes externes vers une URL comme https://domain.com/my/web/app/
vers un serveur LAN interne à https://10.0.0.22/
. Voici ma tentative de représenter la traduction en 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) <-------|
Voici le bloc d'emplacement réel dans mon fichier de configuration nginx:
location ^~ /my/web/app/
{
proxy_buffering off;
rewrite /my/web/app/(.*) /$1 break;
proxy_pass https://10.0.0.22/;
proxy_redirect default;
}
Cela fonctionne très bien pour la traduction d'URI entre les chemins URI internes et externes pour les requêtes et réponses HTTP, mais tous les URI dans le contenu HTML (images corporelles, CSS, scripts) ne sont pas traduits.
Par exemple, des images avec des chemins relatifs incorporés dans la réponse HTML, avec des URI comme /images/logo.png, sont retransmises au client Web et interprétées comme https://domain.com/images/logo.png
au lieu de https://domain.com/my/web/app/images/logo.png
.
Je peux comprendre pourquoi cela se produit, mais ce serait merveilleux s'il y avait un moyen de proxy dynamiquement le contenu ainsi que les demandes. Existe-t-il un moyen d'obtenir que nginx convertisse également les URI incorporés dans le contenu HTML? Est-il possible d'analyser et de mettre à jour dynamiquement du contenu HTML lors de son passage via le serveur proxy?
la source
Réponses:
La seule solution à cela que j'ai trouvée jusqu'à présent est le HttpSubsModule (voir aussi la page github ).
Le module ne fait pas partie des sources officielles de Nginx, vous devrez donc probablement construire Nginx vous-même pour utiliser ce module.
la source