В конфигурации Nginx, если вы хотите ограничить скорость обработки запросов с помощью limit_req_zone
/ limit_req instructions
, Я действительно не понимаю, как использовать nodelay
вариант.
Насколько я понимаю, он завершает запросы с превышением установленной скорости, не задерживая их. Так что это похоже на burst=0
. Вот почему я не понимаю следующий пример:
limit_req zone=one burst=5 nodelay;
burst
определяет количество запросов, которые могут быть отложены, поэтому в чем смысл определения burst
если есть nodelay
вариант?
я нахожу limit_req
документация достаточно понятная.
burst
документируется таким образом:
Чрезмерные запросы задерживаются до тех пор, пока их количество не превысит максимальный размер пакета [...]
nodelay
документируется таким образом:
Если задержка чрезмерных запросов при ограничении запросов нежелательна, следует использовать параметр nodelay.
Запросы ограничены, чтобы соответствовать определенной ставке. Если запросы поступают с большей скоростью, не более установленного количества запросов в единицу времени будет обслуживаться. Затем вам нужно решить, что делать с этими другими запросами.
burst
, нет nodelay
) запросы отклоняются с ошибкой HTTP 503.burst
, вы складываете определенное количество запросов в очередь ожидания, но вы не обрабатываете их быстрее, чем определено запросов в единицу времени ставка.burst
и nodelay
, очередь не будет ждать и пакеты запросов будут обработаны немедленно.Комментарии к исходному ответу кажутся неправильными.
Возникает вопрос, в чем разница между, скажем, rate = 6r / s burst = 0 и rate = 1r / s burst = 5 nodelay
Ответы хороши для объяснения разницы, когда опция nodelay НЕ присутствует - в этом случае запросы встают в очередь с пакетом и помещаются в очередь без пакета.
Исходный ответ кажется правильным - с помощью nodelay пакетные запросы обрабатываются немедленно. И, следовательно, единственный вывод из этого состоит в том, что нет никакой разницы между указанием пакета + nodelay и просто указанием верхнего предела с busrt = 0 в первую очередь.
Поэтому, чтобы более лаконично ответить на вопрос OP: значение пакета при указании nodelay такое же, как просто указание большей скорости без пакета.
С участием burst
и nodelay
указано, что мне легче понять такой механизм (наоборот, чем это обычно понимается):
burst
Запросы. С участием $binary_remote_addr
это максимальное количество запросов, которые вы принимаете с данного адреса. Каждый запрос увеличивает внутренний счетчик. Когда счетчик достигает burst
все дополнительные запросы отклоняются (и счетчик не увеличивается сверх burst
стоимость).rate
.Эта логика предполагает, что имеет смысл указать высокий burst
значение (например, 100 и более) и низкий rate
стоимость (даже что-то вроде 2р / с). Это лучше обрабатывает нормальный просмотр (пакет параллельных запросов, за которым следует период молчания), одновременно защищая от непрерывного потока запросов ботов.
На основе отличный ответ Дэна и дальше исходный код nginx, краткое изложение nodelay
поведение выглядит следующим образом:
burst
сколько новый одновременные запросы разрешены.rate
сколько новый одновременные запросы становятся старый в единицу времени. (Это обновление происходит постепенно: один раз на запрос, но не в секунду.)Я задал вопрос Николя парню, который написал пост на сайте nginx. Ограничение скорости NGINX. Его ответ как ниже
При прежнем ограничении скорости nginx будет принимать последовательные запросы с интервалами в 1/6 секунды. он не будет принимать пакеты запросов, которые не удовлетворяют этому минимальному временному интервалу. С другой стороны, в последнем определении nginx будет принимать пакет до 6 запросов независимо от временного интервала между запросами. Ссылка для ответа
Предлагаю прочитать эту ветку: limit_req_zone ограничение по местоположению / прокси
и этот ответ: переполнение стека