Comment faire pour réécrire les URI nginx dans le contenu du corps HTTP?


13

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 rewriteet proxy_passpour 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.pngau 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?


2
Avez-vous trouvé une solution? Si oui, pourriez-vous l'afficher comme réponse?
Huygens

Réponses:


5

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.