Динамическое управление rate limiting без перезагрузки Nginx

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

nginxrate limitinglimit_req

👁 Классический limit_req в Nginx хорош, но статичен — чтобы изменить лимиты, нужно править конфиг и делать reload. В проде это неудобно, особенно если нужно быстро «придушить» конкретный endpoint или IP. Решение — использовать shared memory зоны и переменные для более гибкого контроля.

📝 Настройка динамического rate limit через map

Можно задать разные лимиты для разных URI или клиентов прямо в конфиге, без дублирования блоков. Так лимит применяется только к нужным endpoint, а не ко всему трафику.

http {
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

    map $request_uri $limit_key {
        default "";
        ~^/api/ $binary_remote_addr;
    }

    server {
        location / {
            limit_req zone=api_limit burst=20 nodelay if=$limit_key;
        }
    }
}

📝 Быстрое отключение/включение лимитов через переменные

Можно управлять лимитами через переменные, например, включая их только при определённых условиях. Это позволяет не тротлить healthcheck'и или внутренние сервисы.

map $http_user_agent $limit_enabled {
    default 1;
    "~*healthcheck" 0;
}

limit_req zone=api_limit burst=10 nodelay if=$limit_enabled;

📝 Тонкая настройка burst и nodelay

Важно правильно настроить burst, чтобы не убить пользователей при кратковременных пиках. burst даёт запас для всплесков, а nodelay убирает очередь, сразу отбрасывая лишние запросы — полезно для защиты API.

limit_req zone=api_limit burst=20 nodelay;

❗️ Rate limiting — это не просто «ограничить запросы», а инструмент управления нагрузкой и защиты. Гибкая настройка через переменные позволяет реагировать на трафик без перезагрузок и даёт больше контроля в проде.

tags: #nginx #безопасность #оптимизация

🧭 @recura_tech 🌐 VK 🌐 MAX

Тёмный скриншот с фрагментом конфига Nginx: примеры limit_req_zone и map, настройки burst и nodelay; виден логотип RECURA и подпись канала.
Пример конфигурации Nginx с динамическим rate limiting через map и переменные.

Читайте так же