Nginx memang terkenal cepat, tapi default configuration tidak selalu optimal, terutama di production dengan traffic tinggi atau backend yang lambat.
Berikut panduan 10 langkah tuning Nginx lengkap, dengan contoh nyata, jebakan yang harus dihindari, dan tips monitoring.
Contents
- 1 1️⃣ Worker Processes dan Worker Connections
- 2 2️⃣ Sendfile dan TCP Optimizations
- 3 3️⃣ Buffer Tuning (Proxy & FastCGI)
- 4 4️⃣ Microcaching / Cache Response
- 5 5️⃣ Rate Limiting & Connection Limit
- 6 6️⃣ Real IP Module (Docker / NAT)
- 7 7️⃣ Logging Optimization
- 8 8️⃣ Error Handling Tanpa Backend
- 9 9️⃣ Timeout & Keepalive Tuning
- 10 🔟 Monitoring & Auto-Tuning
- 11 Bonus: Tips Advanced
- 12 Kesimpulan
- 13 Related Posts
1️⃣ Worker Processes dan Worker Connections
Penjelasan
worker_processesmenentukan jumlah worker process (event loop non-blocking).worker_connectionsmenentukan berapa koneksi simultan tiap worker dapat handle.
Rumus kasar kapasitas maksimum:
max_connections ≈ worker_processes × worker_connections
Contoh konfigurasi
worker_processes auto; # mulai dengan auto, lalu tweak jika perlu
worker_rlimit_nofile 65535; # buka limit file descriptors cukup tinggi
events {
worker_connections 8192; # per worker
multi_accept on; # terima banyak koneksi sekaligus
use epoll; # Linux spesifik, lebih cepat dari select
}
Kesalahan umum
- Terlalu banyak worker → context switch tinggi
- Worker terlalu sedikit → max connections cepat habis
Tip
- Mulai dengan
auto - Monitor
active connections→ tweak sesuai kebutuhan
2️⃣ Sendfile dan TCP Optimizations
Untuk melayani file statis, optimasi TCP dan I/O sangat krusial.
sendfile on;
tcp_nopush on; # gabungkan packet agar lebih efisien
tcp_nodelay on; # kirim packet segera, tanpa delay
sendfile→ mengirim file langsung dari kernel → RAM → socket tanpa copy ke user spacetcp_nopush→ hindari packet fragmentasitcp_nodelay→ low latency untuk koneksi kecil
Kesalahan umum
- Tidak aktifkan → static file lebih lambat
- Kombinasi buffer default yang terlalu kecil → sering I/O block
3️⃣ Buffer Tuning (Proxy & FastCGI)
Nginx memakai buffer untuk menyimpan response upstream. Buffer default sering tidak cukup untuk trafik tinggi, menyebabkan worker block.
Proxy Buffer
proxy_buffers 16 16k;
proxy_buffer_size 16k;
proxy_busy_buffers_size 32k;
FastCGI Buffer
fastcgi_buffers 16 16k;
fastcgi_buffer_size 16k;
fastcgi_busy_buffers_size 32k;
fastcgi_connect_timeout 5s;
fastcgi_send_timeout 30s;
fastcgi_read_timeout 30s;
Kesalahan umum
- Buffer terlalu kecil → backend sering menunggu → latency naik
- Buffer terlalu besar → RAM terbuang sia-sia
4️⃣ Microcaching / Cache Response
Untuk dynamic content read-heavy yang bisa di-cache 1–5 detik, microcaching sangat efektif.
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=microcache:100m max_size=10g inactive=1m use_temp_path=off;
location /api/ {
proxy_cache microcache;
proxy_cache_valid 200 5s;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_lock on; # hindari cache stampede
proxy_cache_lock_timeout 5s;
}
Efek
- Mengurangi load backend
- Menjaga latency tetap rendah
- Sangat efektif untuk homepage, API, feed, dashboard read-heavy
5️⃣ Rate Limiting & Connection Limit
Lindungi server dari spike traffic atau abuse.
limit_req_zone $binary_remote_addr zone=api:10m rate=5r/s;
server {
location /api/ {
limit_req zone=api burst=10 nodelay;
}
}
limit_req→ request per IPburst→ toleransi sementaranodelay→ langsung throttle- Berguna untuk API publik, login, search endpoint
Kesalahan umum
- Rate limit tanpa
burst→ user sah ditolak - Tidak pakai
$binary_remote_addr→ memory lebih boros
6️⃣ Real IP Module (Docker / NAT)
Jika Nginx berada di balik proxy / Docker / load balancer, $remote_addr default = proxy. Untuk rate limit, logging, dan security, perlu update dengan ngx_http_realip_module.
http {
real_ip_header X-Forwarded-For;
set_real_ip_from 172.18.0.0/16; # subnet trusted Docker
real_ip_recursive on;
}
Kesalahan umum
- Tidak menambahkan
set_real_ip_from→ semua IP = proxy real_ip_recursive off→ hanya ambil IP terakhir, bukan client asli
7️⃣ Logging Optimization
- Log default bisa menambah overhead CPU & I/O, terutama untuk file statis.
location ~* \.(css|js|png|jpg|gif|ico)$ {
access_log off;
expires 30d;
}
- Gunakan
log_formatcustom untuk debug atau metrics - Hanya log hal penting → RAM dan I/O lebih hemat
8️⃣ Error Handling Tanpa Backend
- Gunakan
try_filesuntuk SPA atau fallback:
location / {
try_files $uri /index.html;
}
- Gunakan
error_pageuntuk maintenance:
error_page 503 /maintenance.html;
User tetap mendapatkan response walau backend down, tanpa PHP/Node menjalankan apapun
9️⃣ Timeout & Keepalive Tuning
client_body_timeout 10s;
client_header_timeout 10s;
send_timeout 10s;
keepalive_timeout 15s;
keepalive_requests 100;
- Mencegah slow client menahan worker
- Mengurangi resource waste pada koneksi idle
Kesalahan umum
- Timeout terlalu panjang → worker terjebak slow client
- Timeout terlalu pendek → legitimate request terputus
🔟 Monitoring & Auto-Tuning
Monitoring adalah kunci tuning nyata.
- stub_status module → active connections, reading, writing, waiting
- Logs → 499, 502, 504 errors
- Metrics → latency, throughput
Contoh stub_status:
location /nginx_status {
stub_status on;
allow 127.0.0.1;
deny all;
}
- Gunakan hasil monitoring → tweak:
worker_processesworker_connections- buffer
- timeout
- Tanpa monitoring → tuning buta
Bonus: Tips Advanced
- Gunakan
mapdirective untuk cache bypass, A/B testing, conditional headers - Gunakan Unix socket untuk backend satu host → latency rendah
- Gunakan TCP socket untuk multi-host / containerized setup
- Gunakan microcaching + buffer tuning → sering lebih efektif daripada scale-out server
- Gunakan proxy_cache_lock untuk menghindari cache stampede
Kesimpulan
Nginx cepat, tapi bukan magic.
10 langkah ini membantu:
- Worker processes & connections
- Sendfile & TCP optimizations
- Buffer tuning
- Microcaching
- Rate limiting
- Real IP module
- Logging optimization
- Error handling tanpa backend
- Timeout & keepalive tuning
- Monitoring & auto-tuning
Kalimat inti:
Nginx cepat & stabil bukan default, tapi achievable dengan konfigurasi cerdas, buffer tepat, cache bijak, dan monitoring real-time.