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 rewrite
und verwendet, proxy_pass
um 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.png
statt 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?
quelle
Antworten:
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.
quelle