Ошибка 429 Too Many Requests: что значит и как настроить ограничение
429 Too Many Requests — клиент прислал слишком много запросов за короткое время, и сервер временно перестал их выполнять. Это обычная защита: от подбора паролей, от слишком частых обращений к API, от ботов. Посетителю обычно достаточно подождать.
Содержание 9
Что означает код 429
Код 429 описан в RFC 6585 — дополнении к стандарту HTTP. Он значит: пользователь отправил слишком много запросов за определённое время. В ответе стоит объяснить, что случилось, а заголовок Retry-After может подсказать, сколько ждать перед новым запросом. Сохранять ответ 429 в кэше нельзя.
Как сервер узнаёт пользователя и как считает его запросы, стандарт не определяет: это может быть учётная запись или cookie, а в примере из документации nginx запросы считаются по IP-адресу клиента.
Отвечать именно 429 сервер не обязан: ограничивая нагрузку, он может, например, просто обрывать соединения.
Если вы посетитель
- Подождите несколько минут и не обновляйте страницу много раз подряд: каждое обновление — новый запрос.
- Если вы выходите в интернет через общий адрес — в офисе, в общественном Wi-Fi, через мобильного оператора, — а сайт считает запросы по IP-адресу, лимит могли исчерпать другие люди. Попробуйте позже или переключитесь с Wi-Fi на мобильный интернет.
- Если 429 вернул API, посмотрите в ответе заголовок Retry-After, если сервер его прислал: там сказано, сколько ждать.
- Если ошибка не проходит, напишите владельцу сайта, что и когда вы делали.
Как ограничить частоту запросов в nginx
В nginx за это отвечает модуль limit_req. Сначала в блоке http (файл /etc/nginx/nginx.conf) описывают зону — где хранить счётчики и какой темп разрешён:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;Здесь запросы считаются по IP-адресу клиента, под счётчики отведено 10 МБ памяти, а разрешён один запрос в секунду. Темп меньше одного запроса в секунду задают в минутах: 30r/m — это ползапроса в секунду.
Затем ограничение включают для нужного адреса:
location /api/ {
limit_req zone=one burst=5;
limit_req_status 429;
proxy_pass http://127.0.0.1:8000;
}Строку proxy_pass замените той, что передаёт запросы вашему приложению.
- burst — сколько лишних запросов nginx готов придержать. Запросы сверх темпа он задерживает, пока их не станет больше burst, а дальше отклоняет. По умолчанию burst равен нулю.
- limit_req_status — каким кодом отвечать на отклонённые запросы. По умолчанию nginx отвечает 503, а 429 точнее говорит клиенту, что случилось. Директива есть в nginx с версии 1.3.15.
Не включайте такое ограничение для всего сайта в location /: одна страница тянет за собой картинки, стили и скрипты, и обычный посетитель быстро упрётся в лимит.
Отклонённые запросы nginx записывает в журнал ошибок:
limiting requests, excess: 5.120 by zone "one"Чтобы сначала проверить настройку, ничего не отклоняя, добавьте limit_req_dry_run on (есть с версии 1.17.1): nginx будет только писать в журнал такие же строки с пометкой dry run.
После любых правок: sudo nginx -t, затем sudo systemctl reload nginx.
Как защитить вход в WordPress
Вход в WordPress идёт через адрес /wp-login.php. Чтобы подбирать пароли было медленно, ограничьте частоту запросов к нему. В блоке http заведите отдельную зону с мягким темпом:
limit_req_zone $binary_remote_addr zone=login:10m rate=30r/m;А в настройках сайта — отдельный блок для адреса входа:
location = /wp-login.php {
limit_req zone=login burst=3;
limit_req_status 429;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}Путь к сокету указан для PHP 8.3 из Ubuntu 24.04; в Ubuntu 26.04 это php8.5-fpm.sock.
Что ещё учесть
Сайт за CDN или прокси. Тогда все запросы приходят к nginx с адресов посредника, и посетители делят один лимит на всех. Настройте nginx так, чтобы он видел настоящий IP-адрес посетителя, или ограничивайте частоту запросов на стороне CDN.
API. Если ограничение делает само приложение, пусть оно присылает вместе с 429 заголовок Retry-After: так клиенты API смогут повторять запросы автоматически и вовремя.
429 и поиск Яндекса
По справке Яндекса, ответ 429 значит, что за короткое время отправлено слишком много запросов, — например, это может быть попытка DDoS-атаки. Заголовок Retry-After Яндекс не учитывает. Яндекс советует настроить ограничение количества запросов, задать квоты для разных типов пользователей и оптимизировать инфраструктуру. Настраивайте лимиты так, чтобы они не мешали поисковым роботам обходить сайт.
Чем 429 отличается от соседних кодов
| Код | Когда возникает |
|---|---|
| 403 | Доступ запрещён — ожидание не поможет |
| 429 | Слишком много запросов: подождите и повторите |
| 503 | Сервер временно не может ответить; этот же код nginx по умолчанию отдаёт при срабатывании limit_req |
Источники
- RFC 6585, раздел 4 — определение кода 429; раздел 7.2 — сервер не обязан отвечать именно 429.
- Документация nginx: модуль limit_req.
- Исходный код nginx: limit_req — строки журнала.
- Яндекс Вебмастер: коды ответа HTTP.
Сверено 6 октября 2026 года.
Что почитать дальше
- Хостинг и VPS с защитой от DDoS — когда лимитов в nginx мало.
- Ошибка 503 Service Unavailable — когда сервер временно не может ответить.
- Ошибка 403 Forbidden — когда доступ запрещён.
- Как разместить сайт на VPS — настройка nginx с нуля.
Проверено и обновлено: 07.10.2026