Ceci fait suite à ma question précédente sur la manière de faire en sorte que nginx renvoie le proxy inverse 302 vers un sous-dossier d'URI au lieu de la racine.
J'ai un serveur proxy nginx qui utilise les directives rewrite
et proxy_pass
pour renvoyer des requêtes externes à 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 :
.-------------. .------------------.
| Proxy nginx | | Serveur web local |
| (domain.com) | | (10.0.0.22) |
'-------------' '------------------'
| |
| |
GET https://domain.com/my/web/app/ ----------->| |
|---------------->| GET /
| |
|<----------------| 302 redirection /login.php
302 redirection /my/web/app/login.php <-----------| |
| |
GET https://domain.com/my/web/app/login.php -->| |
|---------------->| GET /login.php
| |
|<----------------| 200
Contenu du corps HTML (images, CSS, liens) <-------|
Voici le bloc de localisation 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 d'URI internes et externes pour les requêtes et réponses HTTP, mais toutes les URIs dans le contenu HTML (images du corps, CSS, scripts) ne sont pas traduites.
Par exemple, les images avec des chemins relatifs intégrés dans la réponse HTML, avec des URIs comme /images/logo.png, sont renvoyées 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 renvoyer dynamiquement le contenu ainsi que les requêtes. Est-il possible de faire en sorte que nginx convertisse également les URIs intégrées dans le contenu HTML ? Est-il possible de parser dynamiquement et de mettre à jour le contenu HTML alors qu'il passe par le serveur proxy ?