Dalam dunia pengembangan web, performa dan keamanan menjadi faktor utama yang harus diperhatikan. Salah satu kesalahan yang sering ditemukan, khususnya pada web server, adalah tidak mengatur timeout connection dengan baik. Kesalahan ini sering luput dari perhatian developer maupun administrator server, padahal dampaknya cukup besar terhadap keandalan dan keamanan aplikasi web.
Timeout connection adalah batas waktu maksimal yang diizinkan oleh web server dalam menunggu koneksi dari klien sebelum koneksi dianggap gagal atau dihentikan secara otomatis. Timeout ini berlaku ketika:
Dengan adanya timeout, server dapat memastikan resource yang digunakan tidak "terperangkap" pada koneksi yang tidak aktif atau tidak produktif. Ini menjadi sangat penting ketika server harus menangani banyak koneksi secara simultan.
Ketika koneksi dibiarkan terbuka tanpa adanya batas waktu, resource seperti memory dan thread akan tetap terpakai. Jika terdapat banyak koneksi "menggantung", server bisa mengalami kehabisan resource sehingga layanan utama menjadi terganggu atau bahkan crash.
Timeout yang tidak diatur dapat menyebabkan web server menghadapi penumpukan koneksi yang tidak jelas statusnya. Hal ini menghambat koneksi baru dan membuat website terasa sangat lambat bagi pengguna.
Salah satu jenis attack yang sering memanfaatkan lemahnya pengaturan timeout adalah Slowloris Attack. Dengan mengirimkan koneksi secara perlahan, penyerang dapat membanjiri server dengan koneksi palsu sehingga layanan menjadi tidak dapat diakses oleh pengguna yang sah.
Pengguna akan mengalami loading yang lama atau error 504 Gateway Timeout, akibat server tidak responsif dikarenakan terlalu banyak koneksi yang menunggu tanpa batas waktu.
Setiap web server biasanya memiliki beberapa parameter timeout yang bisa diatur, diantaranya:
Untuk mengatasi permasalahan di atas, langkah utama yang dapat dilakukan adalah mengatur timeout connection secara tepat pada web server. Berikut beberapa tips umum dalam mengatur timeout pada berbagai web server populer:
Pada Apache, pengaturan timeout dapat dilakukan melalui httpd.conf atau apache2.conf.
Timeout 60
KeepAliveTimeout 5
Pada Nginx, pengaturan timeout dapat dilakukan melalui file nginx.conf.
client_header_timeout 15;
client_body_timeout 15;
keepalive_timeout 5 5;
send_timeout 10;
Pada aplikasi Node.js, timeout dapat diatur melalui kode program.
server.setTimeout(30000); // 30 detik
Jika website banyak digunakan oleh pengguna dengan koneksi lambat (misal dari daerah yang sinyal internetnya kurang baik), timeout bisa sedikit diperpanjang. Namun jika mayoritas pengguna memiliki akses cepat, timeout bisa dibuat lebih singkat.
Lakukan uji coba terhadap pengaturan timeout dan pantau dampaknya dengan memonitor resource server serta log error yang terjadi.
Semakin kecil resource server, semakin pendek timeout sebaiknya diatur agar resource lebih cepat "dibebaskan" untuk menangani koneksi baru.
Mengatur timeout connection pada web server adalah langkah penting yang sering terlewatkan namun sangat berpengaruh terhadap performa, stabilitas, dan keamanan website. Dengan pengetahuan dan pengaturan yang tepat, kesalahan umum ini dapat dihindari sehingga resource server tetap efisien, website lebih responsif, dan terhindar dari potensi serangan.
Pastikan setiap administrator server dan developer memiliki kebiasaan untuk selalu memeriksa dan mengatur timeout connection sesuai kebutuhan aplikasi dan karakteristik pengguna. Dengan demikian, web server mampu memberikan layanan terbaik secara konsisten.