Episode ini menjelaskan optimasi worker processes, sendfile dan opsi TCP, kompresi gzip dan brotli, open file cache, serta tuning parameter kernel Linux di sysctl.conf.

NGINX sudah cepat sejak lahir, tapi cepat itu relatif. Dengan tuning yang tepat, server yang sama bisa melayani puluhan ribu request per detik tambahan. Episode 16 ini membahas performance tuning di level NGINX dan kernel Linux.
Kalian akan mengoptimalkan jumlah worker dan koneksinya, mengaktifkan sendfile dan opsi TCP, menyalakan kompresi gzip dan brotli, memanfaatkan open file cache, serta men-tuning parameter kernel di /etc/sysctl.conf. Di akhir episode, NGINX kalian akan berjalan maksimal di hardware yang ada.
NGINX bekerja paling baik ketika jumlah worker mengikuti core CPU:
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 1024;
use epoll;
multi_accept on;
}worker_processes auto; — satu worker per core CPU.worker_rlimit_nofile — menaikkan batas file descriptor per worker.use epoll; — event loop efisien di Linux.multi_accept on; — worker menerima semua koneksi baru sekaligus, bukan satu per satu.Batas praktis: total koneksi maksimal kira-kira worker_processes × worker_connections. Sesuaikan worker_connections dengan beban yang ditargetkan.
Tiga directive ini menentukan cara NGINX mengirim data lewat kernel:
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
}sendfile on; — file dikirim langsung dari kernel tanpa melewati buffer NGINX. Ini penghematan besar untuk file statis.tcp_nopush on; — menumpuk beberapa paket menjadi satu sebelum dikirim, bekerja dengan sendfile.tcp_nodelay on; — menonaktifkan Nagle algorithm untuk respons kecil yang harus segera sampai.Kombinasi sendfile dan tcp_nopush bagus untuk file besar; tcp_nodelay penting untuk aplikasi interaktif dan API.
Kompresi mengurangi ukuran transfer beberapa kali lipat untuk konten teks:
http {
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript image/svg+xml;
gzip_vary on;
}gzip_types harus mencantumkan tipe yang akan dikompres. Perhatikan bahwa gzip hanya untuk teks; file PNG, JPEG, dan video biasanya sudah terkompresi dan tidak perlu.
Brotli mengompres lebih baik dari gzip, tapi membutuhkan modul tambahan:
http {
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript;
}Modul brotli tidak termasuk build default. Jika distro kalian menyediakannya lewat paket nginx-module-brotli, aktifkan dengan load_module; jika tidak, gzip sudah cukup baik sebagai standar.
Setiap request ke file statis membutuhkan pembukaan file, yang mahal jika ribuan request datang. open_file_cache menyimpan metadata dan file descriptor:
http {
open_file_cache max=10000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
}max=10000 — jumlah entri maksimal dalam cache.inactive=20s — entri yang tidak diakses 20 detik dihapus.valid=30s — periode validasi informasi file.min_uses=2 — file baru di-cache setelah dipakai minimal 2 kali.Untuk server yang melayani banyak file statis, cache ini mengurangi waktu disk secara signifikan.
Sebagian performa NGINX ditentukan kernel. Edit /etc/sysctl.conf:
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65535net.core.somaxconn — panjang antrean koneksi menunggu diterima aplikasi. Banyak framework butuh nilai di atas default 128.net.ipv4.tcp_tw_reuse — memungkinkan reuse koneksi TIME_WAIT, penting saat banyak koneksi keluar.ip_local_port_range — memperluas rentang port ephemeral untuk koneksi keluar yang banyak.Terapkan perubahan tanpa reboot:
sudo sysctl -psysctl -p memuat nilai baru dari /etc/sysctl.conf. Verifikasi dengan sysctl net.core.somaxconn.
Episode 16 memeras performa maksimal dari NGINX: kalian mengoptimalkan worker dan koneksinya, mengaktifkan sendfile dan opsi TCP, menyalakan gzip dan brotli, memanfaatkan open file cache, serta men-tuning kernel Linux.
Inti yang harus dibawa pulang:
worker_processes auto dan worker_connections menentukan kapasitas koneksi.sendfile, tcp_nopush, dan tcp_nodelay mengoptimalkan pengiriman data.open_file_cache meng-cache file descriptor untuk file statis.sysctl -p tanpa reboot.Di episode 17 selanjutnya kita akan membahas NGINX stream module (Layer 4 TCP/UDP load balancing) — proxying TCP untuk database dan service, load balancing UDP untuk DNS, serta SSL passthrough tanpa mendekripsi di NGINX.