Ini adalah kelanjutan dari pertanyaan saya sebelumnya tentang cara membuat nginx reverse proxy 302 redirect ke sub-folder URI alih-alih root .
Saya memiliki server proxy nginx yang menggunakan rewrite
dan proxy_pass
arahan untuk mem-proxy permintaan eksternal ke URL seperti https://domain.com/my/web/app/
ke server LAN internal di https://10.0.0.22/
. Inilah upaya saya untuk mewakili terjemahan dalam 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) <-------|
Inilah blok lokasi aktual di file konfigurasi nginx saya:
location ^~ /my/web/app/
{
proxy_buffering off;
rewrite /my/web/app/(.*) /$1 break;
proxy_pass https://10.0.0.22/;
proxy_redirect default;
}
Ini berfungsi baik untuk terjemahan URI antara jalur URI internal dan eksternal untuk permintaan dan tanggapan HTTP, tetapi URI apa pun dalam konten HTML (gambar tubuh, CSS, skrip) tidak diterjemahkan.
Misalnya, gambar dengan jalur relatif yang tertanam dalam respons HTML, dengan URI seperti /images/logo.png, dikirimkan kembali ke klien web dan ditafsirkan sebagai https://domain.com/images/logo.png
ganti https://domain.com/my/web/app/images/logo.png
.
Saya bisa mengerti mengapa hal ini terjadi, tetapi akan luar biasa jika ada cara untuk secara dinamis mem-proxy konten serta permintaan. Apakah ada cara untuk mendapatkan nginx untuk juga mengonversi URI yang tertanam dalam konten HTML? Apakah mungkin untuk mem-parsing dan memperbarui konten HTML secara dinamis saat melewati server proxy?
sumber
Jawaban:
Satu-satunya solusi untuk ini yang saya temukan sejauh ini adalah HttpSubsModule (lihat juga halaman github ).
Modul ini bukan bagian dari sumber Nginx resmi, jadi Anda mungkin perlu membuat Nginx sendiri untuk menggunakan modul ini.
sumber