Mengatur timeout pada Nginx reverse proxy sangat penting untuk mencegah terjadinya error 504 Gateway Time-out saat server backend membutuhkan waktu lebih lama dalam memproses permintaan (request) dari klien. Parameter utama yang perlu dikonfigurasi meliputi proxy_connect_timeout, proxy_send_timeout, dan proxy_read_timeout yang dapat diterapkan di dalam blok http, server, atau location.
Parameter Utama Proxy Timeout Nginx
Terdapat tiga direktif esensial dalam modul ngx_http_proxy_module yang mengatur durasi waktu koneksi antara Nginx dan server upstream (backend):
| Direktif | Default | Fungsi Utama |
|---|---|---|
proxy_connect_timeout |
60s | Mengatur batas waktu untuk membangun koneksi dengan server upstream (backend). |
proxy_send_timeout |
60s | Mengatur batas waktu pengiriman permintaan ke server upstream. |
proxy_read_timeout |
60s | Mengatur batas waktu menunggu respons dari server upstream. |
Langkah Konfigurasi Proxy Timeout
Untuk mengubah nilai timeout, buka file konfigurasi Nginx Anda (biasanya terletak di /etc/nginx/nginx.conf atau di dalam direktori /etc/nginx/sites-available/ untuk virtual host tertentu). Tambahkan direktif timeout sesuai kebutuhan durasi proses aplikasi Anda.
http {
# Mengatur timeout global untuk semua server
proxy_connect_timeout 90s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
server {
listen 80;
server_name contoh.com;
location / {
proxy_pass http://localhost:3000;
# Atau atur secara spesifik per location
proxy_connect_timeout 60s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
}
}
}
Troubleshooting dan Validasi Konfigurasi
Setelah melakukan perubahan pada file konfigurasi Nginx, selalu lakukan pengujian sintaks terlebih dahulu untuk menghindari kegagalan layanan:
sudo nginx -t
Jika hasil pengujian menunjukkan pesan syntax is ok dan test is successful, muat ulang (reload) layanan Nginx untuk menerapkan pengaturan baru:
sudo systemctl reload nginx
Catatan Lapangan
Peningkatan nilai proxy_read_timeout sangat berguna untuk proses unggah (upload) file berukuran besar, eksekusi kueri database yang kompleks, atau pembuatan laporan panjang (PDF generation). Namun, pastikan juga untuk menyesuaikan konfigurasi serupa pada aplikasi backend (seperti PHP-FPM, Node.js, atau Uvicorn/Gunicorn) agar tidak terjadi pemutusan koneksi sepihak dari sisi aplikasi.