Optimasi Nginx untuk High Traffic

Optimasi Nginx untuk High Traffic

Kenapa Perlu Optimasi Nginx?

Default konfigurasi Nginx cukup untuk traffic kecil hingga menengah. Namun saat traffic meningkat (ribuan hingga puluhan ribu request per menit), konfigurasi default bisa menyebabkan bottleneck CPU, RAM, atau I/O.

2. Optimasi Worker Process & Connection

Edit file utama:

sudo nano /etc/nginx/nginx.conf

Ubah bagian berikut:

worker_processes auto;

events {
    worker_connections 4096;
    multi_accept on;
}

Penjelasan:

  • worker_processes auto → menyesuaikan jumlah core CPU
  • worker_connections → jumlah koneksi per worker
  • multi_accept → menerima banyak koneksi sekaligus

3. Optimasi Keepalive & Timeout

http {
    keepalive_timeout 30;
    keepalive_requests 1000;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
}

4. Aktifkan Gzip Compression

gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

5. Brotli Compression (Opsional Lebih Optimal)

Jika sudah install module brotli:

brotli on;
brotli_comp_level 5;
brotli_types text/plain text/css application/javascript application/json image/svg+xml;

6. Setup FastCGI / Proxy Cache

Tambahkan di http block:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

Tambahkan di server block:

location / {
    proxy_cache my_cache;
    proxy_cache_valid 200 60m;
    proxy_pass http://127.0.0.1:3000;
}

7. Optimasi Buffer

client_body_buffer_size 16k;
client_max_body_size 20m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;

8. Rate Limiting (Anti Abuse)

limit_req_zone $binary_remote_addr zone=limit_zone:10m rate=10r/s;
server {
    location / {
        limit_req zone=limit_zone burst=20 nodelay;
    }
}

9. Tingkatkan File Descriptor Limit

sudo nano /etc/security/limits.conf
www-data soft nofile 65535
www-data hard nofile 65535

10. Optimasi Kernel (sysctl)

sudo nano /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535
sudo sysctl -p

11. Tambahkan Security Headers

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header Referrer-Policy "strict-origin-when-cross-origin";

12. Monitoring & Benchmark

Gunakan tools berikut:

  • htop → monitor CPU/RAM
  • nginx status module
  • ab (Apache Benchmark)
  • wrk load testing tool

Contoh benchmark sederhana:

ab -n 10000 -c 100 http://domainkamu.com/

13. Restart & Test Konfigurasi

sudo nginx -t
sudo systemctl reload nginx

14. Best Practice Production

  • Gunakan CDN seperti Cloudflare
  • Gunakan SSL Full Strict
  • Gunakan caching agresif untuk static file
  • Gunakan load balancer untuk horizontal scaling
  • Monitoring realtime traffic

15. Kesimpulan

Optimasi Nginx sangat penting untuk menangani high traffic dengan stabil. Dengan tuning worker, caching, compression, dan kernel optimization, server dapat menangani ribuan request per detik secara efisien.