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