Optimasi parameter keepalive_timeout pada Nginx berfungsi untuk mengatur durasi koneksi HTTP persistent tetap terbuka pada satu socket TCP yang sama, sehingga klien tidak perlu melakukan handshake ulang untuk setiap permintaan aset berikutnya. Pengaturan yang terlalu lama akan menahan alokasi memori dan koneksi worker proses secara sia-sia oleh klien yang tidak aktif, sementara nilai yang terlalu singkat memaksa browser sering membuka koneksi baru yang meningkatkan beban CPU dan latensi jaringan.
Secara default, Nginx menetapkan nilai keepalive_timeout sebesar 75 detik, namun untuk sebagian besar kebutuhan aplikasi web modern dengan lalu lintas tinggi, angka ini perlu disesuaikan bersama direktif pelengkap seperti keepalive_requests dan send_timeout demi efisiensi penggunaan sumber daya RAM dan CPU.
Parameter Utama Konfigurasi Keepalive
Pengaturan keepalive pada Nginx melibatkan beberapa direktif penting yang bekerja secara simultan di dalam blok http, server, atau location pada berkas konfigurasi nginx.conf.
| Direktif Nginx | Nilai Default | Rekomendasi Produksi | Fungsi Utama |
|---|---|---|---|
keepalive_timeout |
75s | 15s - 65s | Batas waktu koneksi keep-alive tetap terbuka tanpa aktivitas tambahan dari klien. |
keepalive_requests |
1000 | 100 - 1000 | Jumlah maksimal permintaan HTTP yang diizinkan dilayani melalui satu koneksi keep-alive tunggal. |
send_timeout |
60s | 10s - 30s | Batas waktu pengiriman respons ke klien di antara dua operasi tulis (write). |
client_header_timeout |
60s | 10s - 20s | Batas waktu menunggu header permintaan dari klien terbaca penuh. |
Contoh Implementasi Blok Kode Konfigurasi
Berikut adalah cuplikan blok konfigurasi pada berkas /etc/nginx/nginx.conf yang dioptimalkan untuk lingkungan server produksi dengan beban trafik tinggi dan stabil:
http {
# Mengatur waktu tunggu koneksi tetap terbuka
keepalive_timeout 15s;
# Membatasi jumlah request per koneksi untuk mendaur ulang memori worker
keepalive_requests 500;
# Mengatur timeout pengiriman data ke klien
send_timeout 20s;
# Mengatur timeout pembacaan header klien
client_header_timeout 15s;
client_body_timeout 15s;
# Pengaturan tambahan untuk upstream keepalive (reverse proxy ke backend)
upstream backend_cluster {
server 127.0.0.1:8080;
keepalive 32;
}
}
Langkah Penerapan dan Pengujian Teknis
Lakukan tahapan berikut untuk menerapkan perubahan konfigurasi ke server produksi secara aman tanpa memutus layanan yang sedang berjalan:
- Buka terminal server dan uji sintaks konfigurasi Nginx menggunakan perintah:
sudo nginx -t - Jika hasil pengujian menunjukkan pesan syntax is ok dan test is successful, muat ulang layanan Nginx dengan perintah:
sudo systemctl reload nginx - Uji latensi dan perilaku koneksi menggunakan alat pengujian seperti
ab(ApacheBench) atauwrkuntuk memastikan tidak terjadi lonjakan penggunaan memori.
Troubleshooting dan Mitigasi Masalah
Kesalahan umum yang sering terjadi di lapangan adalah munculnya galat 504 Gateway Time-out atau Connection reset by peer pada aplikasi berbasis reverse proxy. Hal ini biasanya disebabkan oleh nilai keepalive_timeout backend (seperti PHP-FPM atau Node.js) yang lebih rendah dibandingkan timeout pada Nginx. Pastikan untuk menyelaraskan durasi timeout antara Nginx dan aplikasi hulu (upstream).