Di banyak kasus server “tiba-tiba” kehabisan RAM, penyebabnya bukan memory leak aplikasi, bukan juga traffic spike ekstrem, melainkan buffer Nginx yang dikonfigurasi sembarangan.
Dua tersangka paling sering:
fastcgi_buffer*proxy_buffer*
Masalahnya?
Mereka tidak terlihat, tidak error, dan tidak muncul di log — tapi pelan-pelan menghabiskan RAM.
Contents
- 1 1. Apa Itu Buffer di Nginx?
- 2 2. Dua Jenis Buffer Utama
- 3 3. Salah Kaprah #1: “Buffer Lebih Besar = Lebih Cepat”
- 4 4. Kenapa Disebut Silent Killer?
- 5 5. Cara Kerja Buffer yang Jarang Dipahami
- 6 6. fastcgi_buffer_size vs fastcgi_buffers
- 7 7. Kesalahan Fatal: Menyamakan Dev & Production
- 8 8. Proxy Buffer Lebih Berbahaya dari FastCGI
- 9 9. Kapan Buffer Perlu Besar?
- 10 10. Kapan Buffer Sebaiknya DIMATIKAN?
- 11 11. Konfigurasi Aman (Mayoritas Kasus)
- 12 12. Disk Buffer ≠ Musuh
- 13 13. Cara Audit Buffer di Server Lama
- 14 14. Kesimpulan
- 15 Related Posts
1. Apa Itu Buffer di Nginx?
Secara sederhana:
- Buffer = memori sementara untuk menampung response backend
- Backend bisa:
- PHP-FPM (
fastcgi) - Upstream HTTP (
proxy_pass)
- PHP-FPM (
Nginx bukan streaming by default.
Ia suka:
menerima response backend → simpan di buffer → kirim ke client
Ini efisien kalau dikontrol. Berbahaya kalau tidak.
2. Dua Jenis Buffer Utama
1️⃣ fastcgi_buffer*
Digunakan saat:
- PHP-FPM
- CGI / FastCGI backend
2️⃣ proxy_buffer*
Digunakan saat:
proxy_pass- API
- microservice
- upstream HTTP
Keduanya mengonsumsi RAM per request aktif.
3. Salah Kaprah #1: “Buffer Lebih Besar = Lebih Cepat”
❌ Ini mitos.
Contoh konfigurasi yang sering ditemukan:
fastcgi_buffers 16 512k;
fastcgi_buffer_size 512k;
Hitungannya:
- 16 × 512 KB = 8 MB
- Per request PHP aktif
100 request bersamaan = 800 MB RAM
Tanpa error. Tanpa warning.
4. Kenapa Disebut Silent Killer?
Karena:
- Tidak ada error di log
- Tidak crash langsung
- RAM naik perlahan
- Server mati karena OOM killer
Biasanya diagnosisnya salah:
“PHP boros memori”
Padahal:
Nginx yang menimbun response
5. Cara Kerja Buffer yang Jarang Dipahami
Default behavior:
- Nginx baca response backend
- Simpan di buffer RAM
- Jika buffer penuh → spill ke disk (
/var/lib/nginx/tmp) - Kirim ke client
⚠️ Jika buffer terlalu besar, Nginx tidak pernah spill ke disk → RAM habis duluan.
6. fastcgi_buffer_size vs fastcgi_buffers
fastcgi_buffer_size
- Buffer pertama
- Menampung header + awal body
fastcgi_buffers
- Buffer tambahan
- Digunakan jika response lebih besar
Contoh:
fastcgi_buffer_size 16k;
fastcgi_buffers 8 16k;
Total maksimal:
- 16k + (8 × 16k) = 144 KB per request
Ini jauh lebih masuk akal untuk kebanyakan aplikasi PHP.
7. Kesalahan Fatal: Menyamakan Dev & Production
Di dev:
- 5 request bersamaan → aman
Di production:
- 500 request bersamaan → RAM habis
Buffer harus dihitung berdasarkan concurrency, bukan ukuran response terbesar.
8. Proxy Buffer Lebih Berbahaya dari FastCGI
Kenapa?
- API response bisa besar (JSON, export)
- Banyak client lambat (mobile, poor network)
Contoh berbahaya:
proxy_buffers 32 256k;
Per request:
- 8 MB
Jika:
- 200 client mobile lambat
- RAM = 💀
9. Kapan Buffer Perlu Besar?
Hanya jika:
- Backend cepat
- Client lambat
- Response besar
- RAM sangat cukup
Dan tetap harus:
- Dihitung
- Dibatasi
- Dimonitor
10. Kapan Buffer Sebaiknya DIMATIKAN?
Untuk streaming / API besar:
proxy_buffering off;
Atau:
fastcgi_buffering off;
Efek:
- Response langsung ke client
- RAM jauh lebih stabil
- Backend sedikit lebih sibuk
Trade-off ini sering lebih aman.
11. Konfigurasi Aman (Mayoritas Kasus)
PHP / FastCGI
fastcgi_buffer_size 16k;
fastcgi_buffers 8 16k;
fastcgi_busy_buffers_size 32k;
Proxy / API
proxy_buffer_size 16k;
proxy_buffers 8 16k;
proxy_busy_buffers_size 32k;
Ini cukup untuk:
- 90% aplikasi web
- Traffic menengah
- RAM terbatas
12. Disk Buffer ≠ Musuh
Banyak orang takut spill ke disk.
Padahal:
- Disk jauh lebih murah dari RAM
- SSD modern sangat cepat
- Lebih baik lambat sedikit daripada server mati
Pastikan:
proxy_temp_path /var/lib/nginx/tmp;
Disk penuh = masalah lain. Tapi RAM habis = mati sekarang.
13. Cara Audit Buffer di Server Lama
Checklist cepat:
- Hitung buffer × concurrency
- Cari angka > 1MB per request → waspada
- Cek
/var/lib/nginx/tmp - Cek
htopsaat traffic tinggi - Jangan percaya config copy-paste
14. Kesimpulan
fastcgi_buffer dan proxy_buffer itu bukan optimasi default.
Mereka adalah pisau bermata dua.
Server jarang mati karena satu request besar
Server sering mati karena 100 request “sedikit besar”
Jika ingat satu hal saja:
RAM = concurrency × buffer