rate_limit

Директива `rate_limit` контролирует количество запросов, обрабатываемых сервером NGINX, используя Redis для хранения состояния и управления.

Синтаксисrate_limit key requests=number period=size [burst=number] [rate_limit_prefix=prefix] [rate_limit_pass=upstream];
По умолчаниюnone
Контекстhttp, server, location
Аргументы1-4

Описание

Директива rate_limit позволяет ограничивать скорость запросов к NGINX на основе ключей, определённых с помощью geo, map или другими способами. Благодаря интеграции с бэкендом Redis она даёт возможность управлять лимитами и обеспечивать их выполнение по каждому ключу, который может представлять IP-адрес пользователя или любой другой идентификатор, связанный с запросом. Эту директиву можно настраивать в разных контекстах, таких как HTTP, server или location-блоки; она принимает от 1 до 4 аргументов, что обеспечивает гибкие конфигурации для контроля скорости трафика.

С директивой rate_limit можно задать несколько параметров: ключ, представляющий пользователя или идентификатор, для которого применяются лимиты; число разрешённых запросов (requests); период, в течение которого эти запросы учитываются (period); и необязательный параметр (burst), указывающий, сколько дополнительных запросов может быть допущено в короткий промежуток времени до применения лимита. Директива хранит состояние и отслеживает использование по этим настроенным ключам в Redis, что делает её мощным инструментом для защиты ресурсов от злоупотреблений и более эффективного контроля трафика.

Если ключ превысит свой лимит, директива может ответить указанным кодом состояния, обычно 429 (Too Many Requests), что информирует клиентов о применении ограничения скорости. Это позволяет лучше контролировать модели использования API и веб-сервисов, обеспечивая защиту сервера и улучшая опыт пользователей.

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

location = /limit {
    rate_limit $limit_key requests=15 period=1m burst=20;
    rate_limit_pass redis;
}
⚠

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

⚠

Тестируйте на реальном трафике, чтобы не чрезмерно ограничивать законных пользователей, особенно при использовании параметра burst.

⚠

Ключи, используемые для ограничения частоты запросов, должны быть тщательно определены, чтобы избежать коллизий или непреднамеренных ограничений запросов.

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