Bagaimana cara membuat nginx menulis ulang URI dalam konten HTTP body?

13

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 rewritedan proxy_passarahan 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.pngganti 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?

Steve HHH
sumber
2
Apakah Anda menemukan solusinya? Jika ya, bisakah Anda mempostingnya sebagai jawaban?
Huygens

Jawaban:

5

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.

Rasjid Wilcox
sumber