Бесплатный инструмент

Генератор лимитов запросов для nginx

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

Без регистрацииРаботает в браузереДанные никуда не отправляются


Содержание
  1. Как работает limit_req
  2. Какие значения выбрать
  3. Как проверить, что лимит работает
  4. Чего лимиты не умеют
  5. Частые вопросы

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

Модуль limit_req считает запросы с каждого адреса и пропускает их не быстрее заданной скорости. Всё, что сверх, nginx отклоняет с кодом 429 — до того, как запрос дойдёт до PHP, базы данных или приложения. Поэтому лимиты так хорошо снимают нагрузку от грубых ботов и перебора паролей.

  • limit_req_zone — описывает зону: по какому ключу считать (обычно адрес) и с какой скоростью пропускать. Пишется в блоке http.
  • limit_req — включает зону для конкретного адреса сайта. Пишется в server или location.
  • burst — сколько запросов можно сделать «пачкой» сверх скорости. Нужен, чтобы не мешать людям, которые быстро кликают.
  • nodelay — пачку пропускать сразу, а не растягивать во времени.

Какие значения выбрать

Что защищаемСкоростьПочему
Вход в админку5 в минутуЧеловек не вводит пароль чаще. Перебору этого мало
Поиск, фильтры1–3 в секундуТяжёлые запросы к базе, люди редко ищут чаще
Формы3 в минутуЧеловек не отправляет заявки подряд
API5–20 в секундуЗависит от того, как часто его вызывает ваш интерфейс
Весь сайт10–30 в секундуСтраница с картинками и скриптами — это десятки запросов. Ставьте с запасом

Начните с мягких значений и посмотрите в error.log, кто упирается в лимит. Если среди них люди — увеличьте скорость или burst.

Как проверить, что лимит работает

  1. Проверьте конфигурацию: nginx -t, затем systemctl reload nginx.
  2. Сделайте несколько быстрых запросов подряд, например обновите страницу входа много раз. Должна появиться ошибка 429.
  3. В error.log появятся строки limiting requests с адресом и названием зоны.

Чего лимиты не умеют

Лимит считает запросы с одного адреса. Боты, которые ходят медленно и с тысяч разных адресов через резидентные прокси, в него не упираются: каждый адрес делает по паре запросов. Против таких ботов нужна проверка браузера и поведения. Лимиты и антибот хорошо дополняют друг друга: первые снимают нагрузку, второй отсекает замаскированных ботов.

Частые вопросы

Не заблокирует ли лимит поисковых роботов?

При разумных значениях — нет: роботы Яндекса и Google сами ограничивают скорость обхода. Общий лимит на весь сайт ставьте с запасом и следите за error.log.

Что такое код 429?

Too Many Requests — «слишком много запросов». Он честно говорит клиенту, что нужно подождать, и поисковые роботы правильно его понимают, в отличие от 503 или 403.

Где лежит конфиг nginx?

Основной файл — /etc/nginx/nginx.conf, настройки сайтов — в /etc/nginx/sites-available/ или /etc/nginx/conf.d/. Блок http находится в основном файле, server — в файле сайта.

Почему лимит не срабатывает?

Частые причины: запрос обрабатывает другой location, у которого нет limit_req; сайт стоит за прокси или CDN, и nginx видит один адрес прокси. Во втором случае настройте real_ip, чтобы nginx брал настоящий адрес посетителя.

Что будет, если весь офис ходит с одного IP?

Все сотрудники будут делить один лимит. Добавьте адрес офиса в белый список — генератор соберёт для этого блок geo.

Можно ли ограничить только POST-запросы?

Да. Генератор для форм делает ключ через map: у POST это адрес, у остальных запросов — пустая строка, а пустой ключ nginx не ограничивает.

Нужны ли лимиты, если есть антибот?

Да, они работают на разных уровнях. Лимиты дёшево отсекают грубый поток запросов до приложения, антибот разбирается с ботами, которые ведут себя как люди.

Полезно по теме