dynamic_limit_req_zone

Директива `dynamic_limit_req_zone` настраивает область общей памяти для отслеживания и ограничения чрезмерной частоты запросов по IP-адресу или по определённому ключу.

Синтаксисdynamic_limit_req_zone key zone=name:size rate=rate [sync] redis=address block_second=time;
По умолчаниюnone
Контекстhttp
Аргументы5

Описание

Директива dynamic_limit_req_zone является важной частью модуля ngx_dynamic_limit_req_module и используется для динамического управления скоростью запросов от IP и защиты от злоупотреблений. Она создаёт область общей памяти, в которой хранится текущее состояние частоты запросов для заданных ключей, позволяя NGINX контролировать, как часто один клиент может обращаться к серверу.

Эта директива принимает несколько параметров:
- key: Указывает ключ для отслеживания запросов, который может быть комбинацией текста и переменных (например, $binary_remote_addr позволяет отслеживать по IP-адресу клиента).
- zone=name:size: Определяет имя и размер области общей памяти; name — идентификатор, а size задаёт объём выделяемой памяти (например, 5m для 5 мегабайт).
- rate=rate: Устанавливает максимальную скорость запросов (в запросах в секунду), допустимую для ключа, выраженную целыми числами с шагом 0.001 запроса в секунду (например, 5r/m — пять запросов в минуту).
- sync: Необязательный флаг для включения синхронизации между процессами.
- redis=address: Указывает расположение сервера Redis для внешнего хранения состояний запросов.
- block_second=time: Определяет длительность (в секундах), на которую IP должен быть заблокирован после превышения допустимой скорости.

В целом, dynamic_limit_req_zone помогает смягчать такие проблемы, как DDoS-атаки, контролируя поток запросов и позволяя динамически регулировать параметры в зависимости от шаблонов трафика.

Пример конфига

dynamic_limit_req_zone $binary_remote_addr zone=sms:10m rate=10r/s redis=127.0.0.1 block_second=600;

Убедитесь, что сервер Redis запущен и доступен для NGINX, иначе директива не будет работать как задумано.

Если размер разделяемой памяти слишком мал, это может привести к недостаточному отслеживанию одновременных запросов и к ошибочным расчётам лимитов запросов.

Не забудьте правильно настроить параметры Redis при использовании опции redis; отсутствие или неверные настройки могут привести к сбоям в отслеживании частоты запросов.

← Ко всем директивам