Dalam konfigurasi Nginx, ketika Anda ingin membatasi laju pemrosesan permintaan dengan menggunakan limit_req_zone
/ limit_req instructions
, saya tidak benar-benar memahami penggunaan nodelay
opsi.
Dalam pemahaman saya, ini mengakhiri permintaan di atas tingkat yang ditentukan tanpa menunda mereka. Jadi sepertinya sama dengan burst=0
. Itu sebabnya saya tidak mengerti contoh berikut:
limit_req zone=one burst=5 nodelay;
burst
mendefinisikan jumlah permintaan yang bisa ditunda, jadi apa artinya mendefinisikan burst
jika ada nodelay
opsi?
limit_req_zone $binary_remote_addr zone=flood:10m rate=6r/s; limit_req zone=flood burst=0;
yang memungkinkan 6 permintaan per detik danlimit_req_zone $binary_remote_addr zone=flood:10m rate=1r/s; limit_req zone=flood burst=5 nodelay;
yang juga memungkinkan 6 permintaan per detik?Komentar pada jawaban awal tampaknya salah.
Pertanyaan yang dihadapi adalah apa perbedaan antara, katakanlah rate = 6r / s burst = 0 dan rate = 1r / s burst = 5 nodelay
Jawabannya bagus untuk menjelaskan perbedaan ketika opsi nodelay TIDAK hadir - dalam hal ini, permintaan mengantri dengan burst, dan 503 akan tanpa burst.
Jawaban aslinya tampaknya tepat - dengan nodelay, permintaan burst diproses segera. Dan karenanya, satu-satunya implikasi dari itu adalah bahwa tidak ada perbedaan antara menentukan burst + nodelay vs hanya menentukan batas yang lebih tinggi dengan busrt = 0 di tempat pertama.
Oleh karena itu, untuk menjawab pertanyaan OP secara lebih ringkas: makna burst ketika nodelay ditentukan sama dengan hanya menentukan tingkat yang lebih besar tanpa burst.
sumber
nodelay
, bukankah itu berarti permintaan tersebut diproses segera alih-alih antri?Dengan
burst
dannodelay
ditentukan, saya merasa lebih mudah untuk memahami mekanisme seperti ini (sebaliknya yang biasanya dipahami):burst
permintaan. Dengan$binary_remote_addr
jumlah permintaan maksimum yang Anda terima dari alamat yang diberikan. Setiap permintaan menambah penghitung internal. Ketika penghitung mencapaiburst
semua permintaan tambahan ditolak (dan penghitung tidak bertambah melebihiburst
nilai).rate
.Logika ini menunjukkan bahwa masuk akal untuk menentukan
burst
nilai tinggi (misalnya 100 dan lebih banyak) danrate
nilai rendah (bahkan sekitar 2r / dtk). Ini menangani penelusuran normal (sejumlah permintaan paralel diikuti dengan periode tenang) dengan lebih baik sekaligus melindungi dari aliran permintaan bot berkelanjutan.sumber
Saya menanyakan pertanyaan Nicolas kepada orang yang menulis posting di bawah ini di situs web nginx. Pembatasan NGINX Rate . Balasannya adalah seperti di bawah ini
sumber
Berdasarkan jawaban Dan yang luar biasa dan pada kode sumber nginx , ringkasan ringkas untuk
nodelay
perilaku tersebut adalah sebagai berikut:burst
adalah berapa banyak baru permintaan bersamaan diperbolehkan.rate
adalah berapa banyak permintaan bersamaan baru menjadi lama per unit waktu. (Pembaruan ini terjadi secara bertahap: sekali per permintaan tetapi tidak per detik.)sumber
Saya menyarankan untuk membaca utas ini: limit_req_zone batas berdasarkan lokasi / proxy
dan jawaban ini: stackoverflow
sumber