dynamic_limit_req
Директива dynamic_limit_req контролирует скорость входящих запросов, предотвращая злоупотребления путём динамической блокировки IP-адресов на основе их шаблонов запросов.
Описание
Директива dynamic_limit_req является частью ngx_dynamic_limit_req_module и используется для динамического управления скоростью запросов для каждого IP-адреса. Эта директива эффективно снижает риск злоупотреблений путём задания ограничения скорости, которое замедляет запросы, превышающие указанное пороговое значение. Она поддерживает зону разделяемой памяти для отслеживания состояния, включая текущее количество избыточных запросов для разных ключей (например, IP-адресов). Когда запрос превышает установленную допустимую скорость запросов, модуль вводит задержку для избыточных запросов (если не указан параметр nodelay), которые задерживаются перед обработкой. Если число избыточных запросов превышает порог burst, они также могут быть полностью отклонены с возвратом настроенного кода состояния HTTP, что обеспечивает своевременную обработку только тех запросов, которые соответствуют заданным лимитам.
Данная директива поддерживает три аргумента: указанную зону разделяемой памяти, необязательный параметр burst, определяющий максимальное число запросов во всплеске, и, опционально, параметр delay, задающий конкретную задержку для обработки запросов, превышающих лимиты. Такая гибкость позволяет реализовать сложные политики ограничения скорости, которые могут значительно повысить доступность сервиса и обеспечить справедливость между пользователями.
Пример конфига
http {
dynamic_limit_req_zone $binary_remote_addr zone=my_limit:10m rate=5r/s;
server {
location /api {
dynamic_limit_req zone=my_limit burst=10;
}
}
}Убедитесь, что указанная зона разделяемой памяти была определена с помощью директивы dynamic_limit_req_zone.
Неправильная настройка параметров burst и rate может привести либо к избыточному ограничению, либо к недостаточной защите от злоупотреблений.
Параметры delay могут усложнить обработку запросов и, при недостаточном мониторинге, привести к увеличению задержки для пользователей.