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>[^?]*) $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. 😀