Jest to kontynuacja mojego wcześniejszego pytania, jak przekierować nginx odwrotne proxy 302 do podfolderu URI zamiast root .
Mam serwer proxy Nginx, który korzysta z dyrektyw rewrite
i proxy_pass
do proxy zewnętrznych żądań do adresu URL, jak https://domain.com/my/web/app/
na wewnętrzny serwer LAN pod adresem https://10.0.0.22/
. Oto moja próba przedstawienia tłumaczenia w 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) <-------|
Oto rzeczywisty blok lokalizacji w moim pliku konfiguracyjnym nginx:
location ^~ /my/web/app/
{
proxy_buffering off;
rewrite /my/web/app/(.*) /$1 break;
proxy_pass https://10.0.0.22/;
proxy_redirect default;
}
Działa doskonale do tłumaczenia URI między wewnętrznymi i zewnętrznymi ścieżkami URI dla żądań i odpowiedzi HTTP, ale żadne URI w treści HTML (obrazy ciała, CSS, skrypty) nie są tłumaczone.
Na przykład obrazy z względnymi ścieżkami osadzonymi w odpowiedzi HTML, z identyfikatorami URI takimi jak /images/logo.png, są przekazywane z powrotem do klienta WWW i interpretowane jako https://domain.com/images/logo.png
zamiast https://domain.com/my/web/app/images/logo.png
.
Rozumiem, dlaczego tak się dzieje, ale byłoby wspaniale, gdyby istniał sposób na dynamiczne zastępowanie treścią proxy oraz żądaniami. Czy istnieje sposób, aby Nginx konwertował również identyfikatory URI osadzone w treści HTML? Czy jest możliwe dynamiczne analizowanie i aktualizowanie treści HTML podczas przechodzenia przez serwer proxy?
źródło
Odpowiedzi:
Jedynym rozwiązaniem, które do tej pory znalazłem, jest HttpSubsModule (patrz także strona github ).
Moduł nie jest częścią oficjalnych źródeł Nginx, więc prawdopodobnie będziesz musiał samodzielnie zbudować Nginx, aby móc korzystać z tego modułu.
źródło