Как настроить Rate Limiting в Nginx на VPS в 2026?

Rate Limiting в Nginx ограничивает число входящих запросов с одного IP-адреса за фиксированный интервал времени. Это защищает сервер на VPS от парсеров, брутфорса и автоматических ботов, которые перегружают ресурсы. Настройка занимает 15 минут через терминал: вы объявляете директиву в конфигурационном файле Nginx, задаете размер зоны памяти и лимитируете запросы к уязвимым страницам сайта.
С чего начать настройку лимитов в конфигурации Nginx?
Шаг 1 из 3 готов: открываем файл конфигурации Nginx на сервере для редактирования. Выполните команду в терминале:
sudo nano /etc/nginx/nginx.conf
В блоке http добавьте строку для создания зоны хранения сессий клиентов. Это займет ровно 1 минуту вашего времени. Вот готовый сниппет для вставки:
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
Зона one выделяет 10 мегабайт оперативной памяти под клиентские IP-адреса, чего достаточно для отслеживания примерно 160 тысяч активных сессий одновременно. Параметр rate=10r/s разрешает не более десяти запросов в секунду от одного источника. Сохраните файл сочетанием клавиш Ctrl+O, а затем выйдите через Ctrl+X.
Каждый последующий запрос сверх установленного лимита сервер начинает задерживать или сразу возвращать с кодом ответа 503, предотвращая исчерпание свободных процессов PHP-FPM или соединений с базой данных PostgreSQL или MySQL.
Как применить ограничения к конкретным разделам сайта?
Шаг 2 из 3 готов: переходим к защите страниц авторизации, личного кабинета или каталога товаров. Откройте файл конфигурации вашего сайта в текстовом редакторе:
sudo nano /etc/nginx/sites-available/default
Внутри нужного блока location добавьте директиву лимитирования. Это займет еще 2 минуты работы. Используйте этот проверенный блок кода:
location /login {
limit_req zone=one burst=5 nodelay;
try_files $uri $uri/ =404;
}
Параметр burst=5 разрешает кратковременный всплеск трафика до пяти запросов сверх лимита, а nodelay обрабатывает их без искусственной задержки в очереди. Такая конфигурация гарантирует, что реальный пользователь успешно пройдет авторизацию при открытии страницы, а агрессивный скрипт парсера или бот для подбора паролей получит блокировку по частоте обращений.
Для создания полноценной инфраструктуры также полезно изучить руководство про настройку отказоустойчивого сайта на VPS для микробизнеса без лишних расходов, чтобы сервер корректно обрабатывал пиковые нагрузки без падения сервиса.
Какие параметры лимитов выбрать для разных страниц?
Сравнение лимитов для различных типов трафика помогает защитить инфраструктуру без ущерба для удобства обычных посетителей.
| Тип страницы | Рекомендуемый rate | Параметр burst | Назначение |
|---|---|---|---|
| Форма входа (/login) | 1r/s | burst=3 | Защита от брутфорса паролей |
| Поиск по каталогу | 5r/s | burst=5 | Отражение парсеров товаров |
| Статические файлы | 30r/s | burst=10 | Комфортный серфинг для людей |
| API запросы | 2r/s | burst=2 | Предотвращение DDoS уровня приложений |
Правильный подбор параметров исключает ложные срабатывания фильтров для живых людей, использующих мобильный интернет с динамическими IP-адресами.
Типичные ошибки при настройке Rate Limiting
- Слишком жесткий лимит для статики: блокируются легитимные пользователи и поисковые роботы.
- Отсутствие параметра burst: браузер клиента получает мгновенную ошибку 503 при параллельной загрузке изображений и скриптов.
- Применение глобального лимита ко всему домену: ломаются AJAX-запросы, корзина интернет-магазина и асинхронные формы.
- Забыли проверить синтаксис конфигурации перед перезапуском службы Nginx.
Шаг 3 из 3 готов: проверяем конфигурацию на наличие синтаксических ошибок в файлах. Выполните команду в терминале:
sudo nginx -t
Если терминал возвращает сообщение об успешности теста и валидности синтаксиса, примените изменения без остановки работы сайта командой:
sudo systemctl reload nginx
После успешного применения защиты обязательно настройте настройку бэкапа сайта и базы данных на VPS пошагово, чтобы исключить потерю данных при любых аппаратных сбоях.
3 шага, которые можно сделать сегодня:
- Откройте терминал по SSH и пропишите зону
limit_req_zoneв файлnginx.confза 3 минуты. - Добавьте директиву
limit_reqдля защищаемых страниц авторизации или поиска за 5 минут. - Выполните проверку командой
sudo nginx -tи перезагрузите веб-сервер за 1 минуту.
Откройте терминал и введите команду sudo nano /etc/nginx/nginx.conf прямо сейчас.


