Wie erstelle ich Nginx-URIs zum Neuschreiben in HTTP-Body-Inhalten?


13

Dies ist eine Fortsetzung meiner früheren Frage, wie ich nginx reverse proxy 302 anstelle von root in einen URI-Unterordner umleiten kann .

Ich habe einen Nginx-Proxy-Server, der die Anweisungen rewriteund verwendet, proxy_passum externe Anfragen an eine URL wie https://domain.com/my/web/app/an einen internen LAN-Server zu senden https://10.0.0.22/. Hier ist mein Versuch, die Übersetzung in ASCII-UML darzustellen:

                                    .-------------.       .------------------.
                                    | 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) <-------|

Hier ist der aktuelle Standortblock in meiner Nginx-Konfigurationsdatei:

location ^~ /my/web/app/
{
    proxy_buffering   off;
    rewrite           /my/web/app/(.*) /$1 break;
    proxy_pass        https://10.0.0.22/;
    proxy_redirect    default;
}

Es eignet sich hervorragend für die URI-Übersetzung zwischen den internen und externen URI-Pfaden für HTTP-Anforderungen und -Antworten, aber alle URIs im HTML-Inhalt (Textbilder, CSS, Skripte) werden nicht übersetzt.

Beispielsweise werden Bilder mit relativen Pfaden, die in die HTML-Antwort eingebettet sind, mit URIs wie /images/logo.png an den Webclient zurückgegeben und als https://domain.com/images/logo.pngstatt interpretiert https://domain.com/my/web/app/images/logo.png.

Ich kann verstehen, warum dies geschieht, aber es wäre wundervoll, wenn es einen Weg gäbe, sowohl Inhalte als auch Anfragen dynamisch zu vertreten. Gibt es eine Möglichkeit, Nginx dazu zu bringen, auch im HTML-Inhalt eingebettete URIs zu konvertieren? Ist es möglich, HTML-Inhalte dynamisch zu analysieren und zu aktualisieren, während sie über den Proxyserver übertragen werden?


2
Haben Sie eine Lösung gefunden? Wenn ja, könnten Sie es als Antwort posten?
Huygens

Antworten:


5

Die einzige Lösung, die ich bisher gefunden habe, ist das HttpSubsModule (siehe auch die Github-Seite ).

Das Modul ist nicht Teil der offiziellen Nginx-Quellen, daher müssen Sie wahrscheinlich Nginx selbst erstellen, um dieses Modul verwenden zu können.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.