Как устранить ошибку 429 “Слишком много запросов”
Как устранить ошибку 429 “Слишком много запросов”
Ошибка HTTP 429 “Too Many Requests” – это код ответа с ограничением скорости, отправляемый сервером, когда пользователь (или клиент) превышает количество разрешенных запросов в течение заданного периода времени. Этот статус обычно является частью механизмов безопасности, защиты API или защиты от DDoS.
В производственных средах он может прерывать работу сервисов, нарушать интеграцию API или влиять на SEO. В этом продвинутом руководстве рассказывается о том, как диагностировать, предотвратить и устранить ошибку 429 как со стороны клиента, так и со стороны сервера.
Что вызывает ошибку 429?
Распространенные сценарии:
Пользователь/бот отправляет слишком много HTTP-запросов (вызовы API, загрузка страниц и т. д.)
Ваше приложение слишком активно использует сторонние сервисы для скраппинга или опроса
Брандмауэры веб-приложений (WAF) или обратные прокси (например, Cloudflare, Nginx) устанавливают ограничения скорости
Серверные или внутренние API-интерфейсы используют библиотеки ограничения скорости (например, express-rate-limit, mod_evasive и т. д.)
Боты или краулеры наводняют веб-сайт или конечную точку
Шаг 1: Определите источник
✅ 1. Проверьте заголовки ответа
Серверы часто отправляют заголовок Retry-After вместе с ответом 429:
HTTP/1.1 429 Too Many Requests
Retry-After: 60Это указывает клиенту, сколько времени нужно подождать (в секундах) перед повторной попыткой.
✅ 2. Проверьте журналы доступа
Для Apache:
cat /var/log/apache2/access.log | grep "429"Для Nginx:
cat /var/log/nginx/access.log | grep "429"Это поможет определить, на каких IP-адресах или конечных точках срабатывает ограничение.
✅ 3. Использование инструментов мониторинга
Журналы Fail2Ban
События брандмауэра Cloudflare
Журналы на уровне приложений (Laravel, Express, Django и т. д.)
Аналитика ограничения скорости (при использовании API-шлюза)
Шаг 2: Исправления на стороне сервера
A. Ограничение скорости в Nginx (если оно включено)
Nginx может быть настроен следующим образом:
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;location /api/ {
limit_req zone=api_limit burst=10 nodelay;
}
Решение:
Увеличьте скорость или скорость передачи данных
Применять к определенным путям (например, /api/), а не глобально
Занести в белый список известные внутренние IP-адреса
B. Apache (mod_evasive или mod_security)
Если mod_evasive активен:


