Membuat Nginx FastCGI Cache mengabaikan query string

Ini melanjutkan tutorial lama saya soal Nginx FastCGI Cache yang bisa sangat meringankan beban kerja VPS dan mempercepat akses websitenya juga. Secara keseluruhan kerjanya bagus tapi agak rewel dalam urusan cookie dan sesi pengunjung, sering tidak dikenali jadi susah buat login atau logout akun apabila ada. Tapi kalau konten anda bersifat statis dan tidak berharap adanya interaksi pengunjung selain membaca maka ini solusi yang pas.

Yak, intronya cukup. 😛 Nah… kalau anda pernah pakai microcache ini atau sedang mencari bagaimana caranya agar Nginx benar – benar mengcache semuanya. Jadi url yang ada query string akan diproses oleh PHP-FPM. Kalau isinya sama persis maka dilayankan dari cache saja sekalian kan? 😀

Saya contohkan dulu dengan adanya url servernesia.com/url-konten-disini dan servernesia.com/url-konten-disini?223 itu dianggap hal yang berbeda oleh Nginx dan tidak dicache yang ada query stringnya. Mudahnya kalau ada tanda tanya (?) dalam format urlnya maka itu adalah yang dinamakan query string.

Solusi pertama adalah dengan membuat aturan baru yang memaksanya tetap dicache. Misal query string yang dipakai adalah ?nama_qs=123abc maka silahkan edit nginx.conf dan masukkan dalam blok location ~ \.php$ {}:

if ($nama_qs != ""){
    set $tanpa_cache 0;
}

Dimana nama_qs ini adalah variabel query string yang akan kita abaikan. Jadi gantikan namanya juga dengan sesuai yang anda pakai.

Alternatifnya dengan mengedit konfigurasi Nginx (nginx.conf) dan letakkan kode berikut dalam blok http{}:

map $request_uri $request_path { 
       ~(?[^?]*) $captured_path; 
    }

Ini akan menangkap url konten aslinya tanpa query string, akan dibuat petanya oleh Nginx.

Kemudian dalam blok location ~ \.php$ {} edit seperti ini

fastcgi_cache_key $scheme$host$request_path$request_method;

Akhirnya kalau sudah mengikuti salah satu maka reload Nginx:

service nginx reload

Dan silahkan dites lagi apakah benar dicache semua atau tidak kontennya. Bisa dengan curl seperti pada panduan setting FastCGI cache sebelumnya atau coba saja dimatikan mesin PHPnya. 😀

Leave a Comment