Membuka sambungan itu tidak gratis. TCP memakan satu perjalanan bolak-balik, TLS memakan satu lagi, dan barulah sesudah itu permintaannya berangkat. Pada sambungan 60 md, itu berarti 120 md sudah habis sebelum server Anda ditanyai apa pun — dan itu per sambungan.

Keep-alive artinya: lakukan itu sekali saja

Dengan keep-alive, perambannya memakai ulang sambungan yang sama untuk dua puluh berkas berikutnya. Ia menyala secara bawaan di setiap server masa kini, dan itulah sebabnya tulisan ini sebagian besar berbicara tentang jangan sampai merusaknya.

# nginx defaults, and they are sensible
keepalive_timeout 65;
keepalive_requests 1000;

Pastikan Anda memilikinya

curl -sSI https://yourdomain.com/ | grep -i -E 'connection|http/'

HTTP/2 atau HTTP/3 di baris statusnya berarti pemakaian ulang sambungan memang sudah terjadi dan bukan sesuatu yang perlu Anda atur — lihat HTTP/2 dan HTTP/3. Yang justru perlu diselidiki adalah Connection: close pada tanggapan HTTP/1.1.

Tiga hal yang merusaknya

  • Penyeimbang beban atau proksi tua di depan yang menutup sambungannya sendiri.
  • Blok upstream yang salah diatur — Nginx berbicara dengan aplikasi Anda tanpa kolam keepalive.
  • Menyajikan aset dari banyak nama inang yang berbeda-beda, sehingga tak ada sambungan yang dipakai ulang untuk berkas berikutnya.
upstream app {
    server 127.0.0.1:9000;
    keepalive 32;          # the pool Nginx keeps open to your app
}

location / {
    proxy_http_version 1.1;
    proxy_set_header Connection "";   # required, or the pool is not used
}
Menyajikan huruf, gambar, dan skrip dari domain Anda sendiri kini lebih cepat daripada dari inang pihak ketiga: sambungan yang sama, tanpa DNS tambahan, tanpa TLS tambahan. Memecah aset ke beberapa nama inang adalah nasihat zaman HTTP/1.1, dan hari ini ia justru sebuah beban.