W konfiguracji Nginx, gdy chcesz ograniczyć szybkość przetwarzania żądań za pomocą limit_req_zone
/ limit_req instructions
, tak naprawdę nie rozumiem użycia tej nodelay
opcji.
W moim rozumieniu powoduje to zakończenie żądań powyżej określonej stawki bez ich opóźniania. Więc wydaje się to równoznaczne z burst=0
. Dlatego nie rozumiem następującego przykładu:
limit_req zone=one burst=5 nodelay;
burst
określa liczbę żądań, które mogą być opóźnione, więc jakie znaczenie ma określenie, burst
czy istnieje nodelay
opcja?
limit_req_zone $binary_remote_addr zone=flood:10m rate=6r/s; limit_req zone=flood burst=0;
co pozwala na 6 żądań na sekundę, alimit_req_zone $binary_remote_addr zone=flood:10m rate=1r/s; limit_req zone=flood burst=5 nodelay;
które na 6 żądań na sekundę?Komentarze do pierwotnej odpowiedzi wydają się błędne.
Nasuwa się pytanie, jaka jest różnica między, powiedzmy, szybkość = 6r / s seria = 0 a stawka = 1r / s seria = 5 węzłów
Odpowiedzi są świetne w wyjaśnianiu różnicy, kiedy opcja nodelay NIE jest obecna - w takim przypadku żądania ustawiają się w kolejce z serią i są 503 bez tej serii.
Oryginalna odpowiedź wydaje się natychmiastowa - przy nodelay żądania serii są przetwarzane natychmiast. I dlatego jedyną tego konsekwencją jest to, że NIE ma różnicy między określeniem serii + węzła, a jedynie określeniem wyższej granicy z busrt = 0.
Dlatego, aby w bardziej zwięzły sposób odpowiedzieć na pytanie PO: znaczenie rozerwania, gdy określono węzeł nodelay, jest takie samo, jak określenie większej szybkości bez rozerwania.
źródło
nodelay
czy nie oznacza to, że te żądania są przetwarzane natychmiast zamiast w kolejce?Z
burst
inodelay
określone Łatwiej jest zrozumieć taki mechanizm (w drugą stronę niż zwykle się to rozumie):burst
żądań. Ze$binary_remote_addr
to maksymalna liczba wniosków, które akceptują z danego adresu. Każde żądanie zwiększa licznik wewnętrzny. Kiedy licznik osiągnie,burst
wszystkie dodatkowe żądania są odrzucane (a licznik nie jest zwiększany ponadburst
wartość).rate
.Ta logika sugeruje, że sensowne jest określenie wysokiej
burst
wartości (np. 100 i więcej) i niskiejrate
wartości (nawet czegoś takiego jak 2r / s). To lepiej obsługuje normalne przeglądanie (partia równoległych żądań, po których następuje cicha przerwa), jednocześnie chroniąc przed ciągłym strumieniem żądań bota.źródło
Zadałem pytanie Nicolasa facetowi, który napisał poniższy post na stronie nginx. NGINX Ograniczenie prędkości. Odpowiedź jest jak poniżej
źródło
W oparciu o doskonałą odpowiedź Dana i kod źródłowy nginx zwięzłe podsumowanie tego
nodelay
zachowania wydaje się następujące:burst
określa liczbę dozwolonych nowych równoczesnych żądań.rate
jest, jak wiele nowych jednoczesnych żądań stał stary na jednostkę czasu. (Aktualizacja odbywa się stopniowo: raz na żądanie, ale nie na sekundę).źródło
Proponuję przeczytać ten wątek: limit_req_zone limit według lokalizacji / proxy
i ta odpowiedź: stackoverflow
źródło