burst и delay

Тема дорожной карты · Nginx

Параметры burst и nodelay директивы limit_req в Nginx управляют обработкой кратких всплесков трафика относительно настроенного ограничения скорости, пропуская легитимные всплески и защищая веб-сервер от продолжительных злоупотреблений. Настройка limit_req zone=req_limit burst=20; позволяет до 20 запросов поставить в очередь сверх базовой скорости; лишние запросы задерживаются до освобождения мощности, а не немедленно отклоняются со статусом 503. Добавление nodelaylimit_req zone=req_limit burst=20 nodelay; — указывает Nginx обрабатывать все запросы из очереди всплеска немедленно без искусственной задержки, отклоняя лишь запросы, превышающие ёмкость всплеска; это предпочтительное поведение для API-эндпоинтов и интерактивных веб-приложений. Параметр delay (доступен в Nginx 1.15.7+) предлагает промежуточный вариант: limit_req zone=req_limit burst=20 delay=10; обрабатывает первые 10 запросов всплеска без задержки и throttle-ит оставшиеся, обеспечивая более плавное ограничение скорости для трафика обратного прокси. Правильная настройка параметров burst и delay вместе со скоростью limit_req_zone необходима для конфигурации ограничения скорости Nginx, защищающей от DoS-атак при сохранении хорошего пользовательского опыта.

Как это работает

burst и delay использует модули limit_req и limit_conn. Определите зону (limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;) и примените (limit_req zone=mylimit burst=20 nodelay;). binary_remote_addr ключует по IP (мало места); используйте $http_x_forwarded_for за load balancer. limit_conn ограничивает конкурентные соединения. Комбинируйте с fail2ban для IP-blocking постоянных нарушителей; с WAF (ModSecurity, naxsi) для L7-атак.

Когда применять

Rate limit на login-эндпойнты с первого дня (5 req / 15 min на IP). Лимит общего трафика на IP против скрейпинга (100 req/s burst 200). Разные зоны на endpoint-паттерн (/api/expensive — 1 req/s; /api/cheap — 100 req/s). За load balancer всегда forwarded-for IP, никогда LB IP.

Типичные ошибки

Ловушки burst и delay: rate limit по source IP за CDN/load balancer, скрывающим реальный client IP (все упираются в лимит IP LB); burst слишком низкий (легитимные всплески упираются в лимит); не возвращают нормальный 429 с Retry-After (клиенты долбят эндпойнт); rate-limit аутентифицированных юзеров по IP, когда они делят офисный NAT.

Связанные понятия

Полезные ресурсы