rate_limit_prefix

Устанавливает префикс для ключей ограничения скорости, используемых в реализации лимитирования на основе Redis в NGINX.

Синтаксисrate_limit_prefix prefix_string;
По умолчаниюnone
Контекстhttp, server, location
Аргументы1

Описание

Директива rate_limit_prefix добавляет указанный префикс к ключам, используемым для ограничения скорости, когда в качестве бэкенда используется Redis. Это полезно для организации и различения ключей ограничения скорости для разных сценариев использования или приложений в рамках одного экземпляра Redis. Когда обрабатывается запрос клиента, директива гарантирует, что полный ключ для ограничения скорости состоит из указанного префикса, объединённого с динамически генерируемым ключом на основе контекста запроса (например, IP-адреса или API key).

При настройке внутри блока server или location префикс конкатенируется с ключом, специфичным для запроса, с использованием символа подчеркивания (_) в качестве разделителя. Такое объединение обеспечивает уникальность ключей для разных контекстов лимитирования, предотвращая коллизии. Если префикс не определён, ключ ограничения скорости остаётся только сгенерированным ключом, зависящим от контекста.

На практике использование префиксов помогает реализовать несколько правил ограничения скорости без конфликтов и упрощает мониторинг или управление лимитами внутри Redis, поскольку ключи будут легко идентифицироваться по префиксам. Например, вы можете настроить разные префиксы для разных API endpoints, чтобы легко различать их использование и соответствующие ограничения скорости.

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

location = /api {
    rate_limit_prefix api;
    rate_limit $limit_key requests=10 period=1m burst=5;
    rate_limit_pass redis;
}

Убедитесь, что суммарная длина префикса и ключа не превышает лимит размера ключа Redis (65535 bytes).

Будьте осторожны с похожими префиксами в разных контекстах, так как это может привести к путанице при мониторинге статистики ограничения скорости.

Если rate_limit_prefix задан в блоке location, убедитесь, что он не конфликтует с другими блоками или контекстами, которые обрабатывают те же ключи.

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