Nginx adalah server web open-source dan berkinerja tinggi yang dapat digunakan untuk mempercepat pengiriman konten dan aplikasi. Nginx meningkatkan keamanan, meningkatkan skalabilitas, dan juga dapat digunakan sebagai penyeimbang beban ketersediaan tinggi. Ini dapat digunakan sebagai proxy terbalik dan salah satu kegunaan Nginx yang paling penting adalah cache konten. Salah satu pendekatan terbaik adalah menggunakan Nginx sebagai cache konten. Dalam artikel ini, kita akan membahas cache konten Nginx FastCGI untuk kinerja situs web yang lebih baik.
Mengaktifkan cache FastCGI di Nginx
Dalam artikel ini, kami berasumsi bahwa Anda telah menginstal Nginx dengan PHP di mesin Linux Anda.
Untuk mulai mengaktifkan caching FastCGI, edit file konfigurasi host virtual tempat caching akan diaktifkan.
$ cd /etc/nginx/conf.d
$ vi example.conf
Tambahkan konten berikut ke bagian atas file. Ingat bahwa garis harus berada di luar direktif {} server .
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri";
Dimana,
- fastcgi_cache_path – lokasi cache
- level – tingkat hierarki cache, ia mengatur hierarki direktori dua tingkat di bawah /etc/nginx/cache
- keys_zone – nama zona memori (Dalam contoh ini saya telah menggunakan MYAPP. Anda dapat memiliki preferensi sendiri)
- tidak aktif – menentukan waktu setelah data cache yang tidak diakses selama waktu yang ditentukan akan dihapus dari cache. Dalam contoh ini, waktu tidak aktif diatur 60m yang dapat ditambah atau dikurangi.
- fastcgi_cache_key – Ini menentukan bagaimana nama file cache akan di-hash
Variabel yang digunakan dalam factcgi_cache_key
- $skema – skema permintaan HTTPS atau HTTP
- $request_method – menentukan metode permintaan seperti GET atau POST
- $host – Nama server yang cocok dengan permintaan
- $request_uri – URI permintaan penuh
Lokasi file cache dapat berada di mana saja di hard disk tetapi ukurannya harus lebih kecil dari RAM+swap sistem untuk menghindari masalah “Tidak dapat mengalokasikan memori”.
Sekarang buka direktif lokasi tempat permintaan PHP diteruskan ke php-fpm. Di dalam “location ~ \.php$ {}” tambahkan baris berikut
fastcgi_cache MYAPP;
fastcgi_cache_valid 200 1m;
Di mana MYAPP adalah nama zona memori dan fastcgi_cache_valid 200 menyimpan semua respons HTTP 200.
Jika hanya waktu yang ditentukan, maka 200, 301, dan 302 tanggapan di-cache.
Jalankan perintah berikut untuk menguji konfigurasi vhost Nginx.
$ nginx -t
Sekarang restart layanan Nginx.
$ systemctl restart nginx
File konfigurasi vhost lengkap terlihat seperti
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; server { listen 80; root /usr/share/nginx/html; index index.php index.html index.htm; server_name your_server_name; location / { try_files $uri $uri/ /index.html; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:unix:/run/php/php8.0-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_cache MYAPP; fastcgi_cache_valid 200 60m; } }
Menguji cache FastCGI
Buat file PHP sederhana di direktori root dokumen.
$ vi /usr/share/nginx/html/info.php
Tempel konten berikut dan simpan
<?php phpinfo(); ?>
Sekarang minta file menggunakan perintah curl atau menggunakan browser
Jika caching berfungsi dengan baik, maka Anda dapat mencantumkan direktori caching di bawah /etc/nginx/cache
Tambahkan baris berikut di atas direktif server{} untuk menunjukkan apakah cache tidak terjawab atau mengenai
add_header X-Cache $upstream_cache_status;
Mulai ulang Nginx dan jalankan perintah curl sebagai
$ curl -I http://localhost/info.php
Menyetel pengecualian cache di Nginx fastCGI Cache
Terkadang kita mungkin tidak perlu menyimpan konten dinamis seperti halaman otentikasi dasar. Jenis konten ini dapat dihindari agar tidak di-cache berdasarkan variabel yang berbeda seperti “$request_method” “”$request_uri” “$http_cookie” dll.
Di bawah ini adalah contoh konfigurasi untuk pengecualian cache dan harus digunakan di dalam server{}
arahan.
#Cache everything by default set $no_cache 0; #Don't cache POST requests if ($request_method = POST) { set $no_cache 1; } #Don't cache if the URL contains a query string if ($query_string != "") { set $no_cache 1; } #Don't cache the following URLs if ($request_uri ~* "/(cp/)") { set $no_cache 1; } #Don't cache if there is a cookie called PHPSESSID if ($http_cookie = "PHPSESSID") { set $no_cache 1; }
Kesimpulan
Pada artikel ini, kami mempelajari cara mengonfigurasi Nginx dengan PHP untuk cache konten dinamis. Selain itu, kami mempelajari berbagai kiat untuk menyiapkan pengecualian cache.