Ubah halaman HTML yang dikembalikan oleh nginx reverse proxy


17

Saya memiliki pengaturan proxy terbalik untuk akses ke aplikasi pihak ketiga yang terletak di dalam intranet dari internet. Katakanlah aplikasi ini ada di URL:

https://internalserver:8080/ (hanya dapat dijangkau dari intranet)

dan proksi aktif:

https://proxyserver/ (dapat dijangkau dari tempat mana pun di dunia)

Proxy dikelola oleh nginx dan berfungsi ok. Ketika pengguna mengakses https://proxyserver/ mereka mendapatkan konten dari aplikasi di https://internalserver:8080/.

Masalahnya adalah aplikasi tersebut menulis URL absolut dalam respons HTML sehingga, ketika pengguna mengklik tautan ke halaman baru, browser mencoba menemukan halaman tersebut dengan nama internalnya, misalnya https://internalserver:8080/somepage alih-alih https://proxyserver/somepage.

Saya tahu ini adalah bug program, tetapi saya tidak dapat memodifikasi program.

Dapatkah saya mencegat respons, memodifikasi URL, dan mengirimkannya (dimodifikasi) ke klien akhir dengan nginx? Atau mungkin dengan alat lain?

EDIT: Saya melihat pertanyaan ini sebelumnya, tetapi kasus saya lebih spesifik, pertanyaan yang dikutip meminta modifikasi umum. Dalam hal program ad hoc fast-cgi adalah solusi terbaik, yang saya inginkan adalah solusi yang lebih spesifik untuk (saya pikir) skenario yang lebih umum. sementara program fast-cgi dapat bekerja, saya mencari solusi termudah dan mungkin lebih kuat dan terbukti di dunia nyata, solusi untuk skenario ini.


Jawaban:



3

http://nginx.org/en/docs/http/ngx_http_sub_module.html

Modul ngx_http_sub_module adalah filter yang memodifikasi respons dengan mengganti satu string yang ditentukan dengan yang lain.

Modul ini tidak dibangun secara default, modul ini harus diaktifkan dengan parameter konfigurasi --with-http_sub_mule.

Contoh Konfigurasi

sub_filter      </head>
    '</head><script language="javascript" src="$script"></script>';
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.