Memodifikasi HTTP Response Body pada Web Server Nginx

Sabtu, 07 November 2020

Memodifikasi HTTP Response Body pada Web Server Nginx. Oke saya sendiri juga sebenarnya bingung mau kasih judul apa. Intinya di Nginx ada modul yang memungkinkan kita untuk mengubha response body dengan nilai yang kita tentukan sendiri pada konfigurasi Nginxnya. Ini mirip dengan kemampuan mod_substitute pada Apache. 


ngx_http_sub_module

Nginx memiliki modul bawaan bernama ngx_http_sub_module. Modul ngx_http_sub_module adalah filter yang memungkinkan kita untuk mengubah respons dengan mengganti satu string yang ditentukan dengan yang lain.

Modul ini tidak tersedia secara default, namun bisa diaktifkan dengan parameter konfigurasi --with-http_sub_module saat kalian mengcompile Nginx. Jika kalian menginstall Nginx melalui repository Ubuntu atau Debian, modul ini ada di paket nginx-extras.

Untuk lokasinya sendiri kalian bisa letakkan di block http, server, maupun di block location.

Contoh:

location / {
            sub_filter 'Change Me!'  'Hello from https://$host/';
            try_files $uri $uri/ =404;
        }

Kalian juga bisa memodifikasi mime type, dan beberapa header lainnya.

nginx_substitutions_filter

Berbeda dengan modul sebelumnya, modul yang satu ini juga dilengkapi fitur filter berdasarkan regex. Modul ini tidak didistribusikan oleh Nginx, namun kalian bisa memasangnya dengan perintah berikut sebelum melakukan compile source Nginx.

git clone git://github.com/yaoweibin/ngx_http_substitutions_filter_module.git

Lalu compile Nginx dengan perintah:

./configure --add-module=/path/to/module

Atau jika kalian menginstall Nginx dari repository Ubuntu dan Debian, paket ini juga berada di paket nginx-extras.

Syntax yang digunakan:

subs_filter source_str destination_str [gior]

  • g: mengganti seluruh string yang sesuai (default syntax)
  • i: mode case-insensitive
  • o: hanya mengganti string pertama saja.
  • r: dipakai jika kalian menggunakan regex untuk memfilter string. (defaultnya menggunakan fixed mode, sama seperti modul ngx_http_sub_module)
Kalian bisa menambahkannya di block server, http, maupun di location.

Contoh penggunaan:

location / {
    subs_filter_types text/html text/css text/xml;
    subs_filter st(\d*).example.com $1.example.com ir;
    subs_filter a.example.com s.example.com;
}

Mungkin kalian bertanya kenapa harus membutuhkan modul ini? Kenapa tidak langsung dimodifikasi saja scriptnya langsung dari path web servernya?

Sebenarnya fitur ini akan lebih membantu jika kalian lebih sering bermain dengan Nginx yang bertindak sebagai reverse proxy dimana kalian tentu tidak bisa memodifikasi outputnya jika server proxy_pass nya adalah ip atau domain external. Dan dengan modul ini kalian bisa memodifikasi outputan dari proxy tadi.

Oke mungkin sekian tutorial singkat kali ini, semoga bermanfaat. Jika ada yang ingin ditambahkan silahkan tinggalkan komentar.

Referensi:

  • https://www.nginx.com/resources/wiki/modules/substitutions/
  • https://nginx.org/en/docs/http/ngx_http_sub_module.html

Artikel Terkait Nginx