Jadi, Anda ingin nginx
mem-proksi permintaan dari klien ke server backend, dan kemudian, sebelum mengembalikan balasan backend ke klien, mengirim balasan seperti itu melalui prosesor eksternal lain?
Saya tidak berpikir Anda dapat melakukan hal di atas dengan nginx
modul resmi apa pun yang disediakan oleh Igor Sysoev dan Nginx, Inc saat ini. Hal terdekat yang tersedia untuk mengubah isi respons adalah beberapa modul filter yang datang bersama dengan nginx, tetapi dimatikan secara default, termasuk add_before_body
, add_after_body
dan sub_filter
arahan:
http://nginx.org/en/docs/http/ngx_http_addition_module.html
http://nginx.org/en/docs/http/ngx_http_sub_module.html
Juga, mungkin gzip on;
apa yang sebenarnya Anda inginkan?
http://nginx.org/en/docs/http/ngx_http_gzip_module.html
Atau, berpotensi, jika Anda tahu perl
dan bersedia untuk menjalankan modul yang sama sekali eksperimental, lihatlah embedding perl
ke dalam nginx
, dengan modul nginx resmi yang dimatikan secara default dan (agak jelas) benar-benar eksperimental:
http://nginx.org/en/docs/http/ngx_http_perl_module.html
Pilihan lain adalah dengan menggunakan semacam pengaturan Fast-CGI yang akan mengarahkan permintaan, di mana, pada gilirannya, script Fast-CGI Anda akan melakukan permintaan ke backend, dan kemudian pemrosesan akhir, sebelum kembali balasan kembali ke nginx ke cache dan kembali ke pengguna.
Ada juga proxy_set_body
(tetapi fastcgi_set_body
belum ada ), untuk mengubah isi permintaan (mis. Dari apa yang telah disediakan klien), tetapi tampaknya tidak ada arahan atau variabel yang setara untuk mendapatkan isi tanggapan, untuk lulus untuk permintaan entah bagaimana selanjutnya ke post-prosesor. Bagaimanapun, modul filter mungkin adalah apa yang Anda inginkan untuk post-prosesor.
(Juga, Anda benar-benar menyadari bahwa pendekatan naif untuk mengirim fork
dan mengirim balasan melalui eksekutif reguler akan menjadi sangat lambat, kan?)
Untuk meringkas , saya pikir gzip on;
persis apa yang Anda cari; lain, asalkan Anda dapat memodifikasi webapp asli, saya pikir taruhan terbaik Anda mungkin adalah menginstal semacam post-prosesor di dalam webapp itu sendiri, yang akan tampak seperti solusi termudah berikutnya secara keseluruhan. Secara potensial, Anda bisa melihat bagaimana modul filter diimplementasikan, misalnya ngx_http_addition_filter_module.c yang disebutkan di atas, ditambah beberapa filter yang lebih relevan seperti ngx_http_gzip_filter_module.c, dan terapkan modul filter yang Anda buat sendiri. Atau rekrut Nginx, Inc. untuk menulis ini untuk Anda! Tapi, serius, gzip on;
hanya berfungsi, dan kemungkinan akan memberi Anda hasil yang lebih baik tanpa masalah, kinerja atau stabilitas masalah, dan itu sudah dikompilasi secara default, Anda hanya perlu mengaktifkannya dinginx.conf
.