Banyak orang mengira caching hanya cocok untuk website statis atau CDN. Padahal, Nginx bisa melakukan caching agresif untuk website dinamis—bahkan sering kali lebih efektif dari CDN jika user dan server berada di region yang sama.
Masalahnya:
- Salah konfigurasi → data basi
- Salah cache key → user dapat data orang lain
- Terlalu agresif → bug yang sulit dilacak
Artikel ini membahas cara kerja proxy_cache, pola aman, dan kesalahan fatal yang sering terjadi.
Contents
- 1 1. Apa Itu proxy_cache?
- 2 2. Dynamic ≠ Tidak Bisa Di-cache
- 3 3. Cara Kerja proxy_cache (Singkat tapi Penting)
- 4 4. Setup Dasar proxy_cache
- 5 5. Cache Key: Sumber Masalah Terbesar
- 6 6. Jangan Cache User Login (WAJIB)
- 7 7. Cache Header Itu Raja
- 8 8. Microcaching: Senjata Rahasia
- 9 9. proxy_cache_lock: Anti Cache Stampede
- 10 10. Cache dan Query String
- 11 11. Debug Cache (WAJIB)
- 12 12. Hal yang TIDAK Boleh Di-cache
- 13 13. Kesalahan Fatal yang Sering Terjadi
- 14 14. Real Use Case yang Masuk Akal
- 15 15. Kesimpulan
- 16 Related Posts
1. Apa Itu proxy_cache?
proxy_cache adalah mekanisme:
- Menyimpan response upstream (HTTP)
- Di disk (dan RAM metadata)
- Dilayani ulang tanpa memanggil backend
Artinya:
Backend bisa tidak dipanggil sama sekali untuk request yang sama.
2. Dynamic ≠ Tidak Bisa Di-cache
Salah kaprah besar:
“Website dinamis tidak bisa di-cache.”
Faktanya:
- Banyak halaman dinamis deterministik
- Banyak user melihat konten yang sama
- Backend sering melakukan kerja yang sama berulang-ulang
Contoh yang bisa di-cache:
- Homepage
- Artikel
- List produk
- Search populer (short TTL)
3. Cara Kerja proxy_cache (Singkat tapi Penting)
- Request masuk ke Nginx
- Nginx cek cache key
- Cache hit → response langsung
- Cache miss → forward ke backend
- Response disimpan (jika memenuhi syarat)
Kunci:
- Cache key
- Cache policy
- Cache bypass
4. Setup Dasar proxy_cache
Definisi Cache Zone
proxy_cache_path /var/cache/nginx
levels=1:2
keys_zone=dynamic_cache:100m
max_size=10g
inactive=60m
use_temp_path=off;
Artinya:
- Metadata cache di RAM: 100 MB
- Data cache di disk: max 10 GB
- Cache idle 60 menit dibuang
Penerapan di Server
server {
location / {
proxy_pass http://backend;
proxy_cache dynamic_cache;
proxy_cache_valid 200 10m;
}
}
5. Cache Key: Sumber Masalah Terbesar
Default cache key:
$scheme$proxy_host$request_uri
Masalah:
- Tidak peduli user login
- Tidak peduli cookie
- Tidak peduli device
Ini bisa sangat berbahaya.
6. Jangan Cache User Login (WAJIB)
map $http_cookie $skip_cache {
default 0;
~session 1;
}
location / {
proxy_cache dynamic_cache;
proxy_cache_bypass $skip_cache;
proxy_no_cache $skip_cache;
}
Efek:
- User login selalu bypass cache
- User anonim tetap dapat cache
7. Cache Header Itu Raja
Idealnya:
- Backend mengontrol cache
- Nginx mengikuti
Contoh backend:
Cache-Control: public, max-age=300
Nginx:
proxy_ignore_headers Cache-Control Expires;
proxy_cache_valid 200 5m;
⚠️ Hati-hati mengabaikan header backend.
8. Microcaching: Senjata Rahasia
TTL sangat pendek:
proxy_cache_valid 200 1s;
Efek:
- Request bersamaan disatukan
- Backend tidak diserbu
- Data tetap “fresh”
Ini sangat efektif untuk:
- Homepage
- API berat
- Traffic spike
9. proxy_cache_lock: Anti Cache Stampede
Tanpa lock:
- 100 request cache miss
- 100 request ke backend
Dengan lock:
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;
Efek:
- 1 request ke backend
- 99 nunggu cache terisi
10. Cache dan Query String
Secara default:
- Query string masuk cache key
Kadang perlu dikontrol:
proxy_cache_key "$scheme$host$uri";
⚠️ Bahaya jika konten berbeda tergantung query.
11. Debug Cache (WAJIB)
Tambahkan header:
add_header X-Cache $upstream_cache_status;
Hasil:
HITMISSBYPASSEXPIRED
Tanpa ini, debugging = neraka.
12. Hal yang TIDAK Boleh Di-cache
- Login page
- Dashboard user
- Cart
- Checkout
- Data sensitif
Rule umum:
Jika beda user → jangan cache
13. Kesalahan Fatal yang Sering Terjadi
- Cache semua tanpa bypass
- TTL terlalu lama
- Cache key terlalu sederhana
- Tidak lock cache
- Tidak monitoring disk
14. Real Use Case yang Masuk Akal
- CMS dengan traffic tinggi
- Blog / media online
- Product catalog
- API read-heavy
- Landing page campaign
15. Kesimpulan
proxy_cache:
- Bukan mainan
- Bukan hanya untuk statis
- Sangat powerful jika dipakai benar
Kalimat paling penting:
Cache yang baik mengurangi load, cache yang salah merusak data.