Skip to content
EN

Nginx rate limiting: zones, burst, 429

Коротко:

2 директивы: limit_req_zone определяет пул (ключ + память + rate), limit_req активирует в location. 10 MB зоны = ~160k уникальных IP в RAM. Добавьте burst для короткого всплеска (burst=20 nodelay — принимает 20 без delay, затем rate limit). Возвращает 429 по умолчанию; логируйте в кастомный log, натравите fail2ban для бан-листа.

Ниже: подробности, пример, смежные термины, FAQ.

Проверить безопасность сайта →

Детали

  • limit_req_zone $binary_remote_addr zone=api:10m rate=60r/m — пул
  • limit_req zone=api burst=20 nodelay — в location
  • limit_req_status 429 — иначе 503 default
  • limit_conn — параллельные соединения (не запросы)
  • Логи: log_format includes $limit_req_status для fail2ban filter

Пример

# /etc/nginx/conf.d/rate-limits.conf
limit_req_zone  zone=api:10m rate=60r/m;
limit_req_zone  zone=login:10m rate=5r/m;
limit_req_status 429;

server {
  location /api/ {
    limit_req zone=api burst=20 nodelay;
    proxy_pass http://backend;
  }
  location /login {
    limit_req zone=login burst=3 nodelay;
    proxy_pass http://backend;
  }
}

# fail2ban filter (jail.d/nginx-rate.conf)
[Definition]
failregex = limiting requests, excess.*client: <HOST>

Связанные

Как настроить rate limiting в nginx

Для настройки rate limiting в nginx необходимо использовать директивы limit_req_zone и limit_req. Эти команды позволяют ограничить количество запросов от одного IP-адреса в определенный временной промежуток. Например, чтобы ограничить 10 запросов в секунду, можно использовать следующий код в конфигурационном файле:

http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=5;
# другие директивы
}
}
}

Параметры настройки rate limiting

При настройке rate limiting в nginx важно учитывать несколько параметров, которые влияют на эффективность и точность контроля трафика.

  • limit_req_zone: определяет зону для хранения состояния запросов. Важно правильно выбрать размер зоны (например, 10m), чтобы она могла вместить необходимое количество IP-адресов.
  • rate: задает максимальное количество запросов в секунду. Например, rate=10r/s ограничивает 10 запросов в секунду от одного IP.
  • burst: позволяет временно превышать лимит запросов. Например, если установить burst=5, то при превышении лимита в 10 запросов в секунду, сервер позволит еще 5 запросов одновременно, прежде чем начнет отклонять их.

Также возможно использование директивы nodelay, чтобы избежать задержек при превышении лимита burst. Например, limit_req zone=one burst=5 nodelay позволяет обрабатывать дополнительные запросы без задержек.

Примеры использования rate limiting в nginx

Рассмотрим более детальный пример настройки rate limiting для API. Предположим, что вы хотите ограничить доступ к API, чтобы предотвратить злоупотребления. Для этого можно использовать следующую конфигурацию:

http {
limit_req_zone $binary_remote_addr zone=api:10m rate=5r/s;
server {
location /api {
limit_req zone=api burst=10;
limit_req_status 429;
# другие директивы
}
}
}

В этом примере мы ограничиваем количество запросов к API до 5 в секунду с возможностью временного превышения до 10 запросов. Если пользователь превышает лимит, он получит ответ с кодом 429 (Too Many Requests).

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

error_log /var/log/nginx/limit_req.log;
location /api {
limit_req zone=api burst=10;
error_page 429 = @handle_limit;
}
location @handle_limit {
add_header Content-Type text/plain;
return 429 'Too Many Requests';
}

Это позволит вам отслеживать, сколько запросов было отклонено и в какие моменты времени. Правильная настройка rate limiting в nginx поможет защитить ваш сервер от атак и обеспечить стабильную работу веб-приложения.

ЗаголовкиCSP, HSTS, X-Frame-Options и др.
SSL/TLSШифрование и сертификат
КонфигурацияСерверные настройки и утечки
Оценка A-FОбщий балл безопасности

Почему нам доверяют

OWASP
рекомендации
15+
заголовков безопасности
<2с
результат
A–F
оценка безопасности

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

1

Введите URL сайта

2

Анализ заголовков безопасности

3

Получите оценку A–F

Что проверяет анализ безопасности?

Инструмент проверяет HTTP-заголовки безопасности, конфигурацию SSL/TLS, утечки серверной информации и защиту от распространённых атак (XSS, clickjacking, MIMEsniffing). Оценка от A до F показывает общий уровень защиты.

Анализ заголовков

Проверка Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и других.

Проверка SSL

Версия TLS, срок сертификата, цепочка доверия, поддержка HSTS.

Обнаружение утечек

Поиск раскрытых серверных версий, debug-режимов, открытых конфигов и директорий.

Отчёт с рекомендациями

Детальный отчёт с объяснением каждой проблемы и конкретными шагами для исправления.

Кому это нужно

Специалисты по безопасности

аудит HTTP-заголовков

DevOps

проверка конфигурации

Разработчики

CSP и HSTS настройка

Аудиторы

соответствие стандартам

Частые ошибки

Нет Content-Security-PolicyCSP — главная защита от XSS. Без него инъекция скриптов значительно проще.
Нет заголовка HSTSБез HSTS возможна downgrade-атака с HTTPS на HTTP. Включите Strict-Transport-Security.
Server header раскрывает версиюServer: Apache/2.4.52 помогает атакующим подобрать эксплойт. Скройте версию.
X-Frame-Options не установленСайт можно встроить в iframe для clickjacking-атаки. Установите DENY или SAMEORIGIN.
Нет X-Content-Type-OptionsБез nosniff браузер может интерпретировать файлы неправильно (MIME sniffing).

Лучшие практики

Начните с базовых заголовковМинимум: HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy. Займёт 5 минут.
Внедрите CSP постепенноНачните с Content-Security-Policy-Report-Only, мониторьте нарушения, затем включите.
Скройте серверные заголовкиУдалите Server, X-Powered-By, X-AspNet-Version из ответов.
Настройте Permissions-PolicyОграничьте доступ к камере, микрофону, геолокации — только то, что реально используется.
Проверяйте после каждого деплояЗаголовки безопасности могут быть перезаписаны при обновлении конфигурации сервера.

Получите больше с бесплатным аккаунтом

История security-проверок и мониторинг HTTP-заголовков безопасности.

Зарегистрироваться (FREE)

Больше по теме

Часто задаваемые вопросы

Rate per IP или per user?

Per IP быстрее (binary_remote_addr в ключе). Per user — после аутентификации через $cookie_session или $jwt_claim.

X-Forwarded-For?

Позади CDN — real_ip_header + set_real_ip_from. Иначе всё банится на CDN IP.

limit_req vs CF / AWS WAF?

CF / WAF — защита от L7 DDoS (10k+ RPS). nginx limit_req — локальный fair-use + slow-brute protection.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.