Как избежать ошибки 429 на GitHub Pages при высоких RPS
GitHub Pages - удобный бесплатный хостинг для статических сайтов, включая одностраничники на React. Однако у него есть ограничения по запросам в секунду (RPS). При тестировании артиллерией вы можете столкнуться с HTTP-кодом 429 (Too Many Requests), особенно при всплесках трафика до 100 RPS. Разберём причины и способы решения.
Почему GitHub Pages возвращает 429 ошибку?
GitHub Pages использует CDN Fastly и имеет лимит около 10-50 RPS на один IP-адрес. Если нагрузка идёт с одного источника (например, тестирование с одной машины), сервер быстро блокирует запросы. Также ограничение может быть связано с общим количеством запросов в минуту. Визуально сайт показывает заглушку, а по кодам - 429. Блокировка длится 2-5 минут, после чего снимается.
Как организовать одностраничник React без 429 ошибок?
1. Оптимизация самого приложения
Уменьшите размер бандла React (100 КБ можно сжать). Используйте React.lazy и Suspense для загрузки вкладок по требованию. Настройте кэширование статики через Service Worker. Это снизит количество запросов к серверу.
2. Использование Cloudflare в качестве прокси
Cloudflare (бесплатный тариф) - эффективный балансировщик и кэширующий CDN. Подключите свой домен к Cloudflare, укажите CNAME на GitHub Pages. Cloudflare будет кэшировать статику и распределять нагрузку, скрывая ваш IP от прямых запросов. Это уменьшит вероятность 429, так как запросы пойдут через разные IP Cloudflare.
3. Горизонтальное масштабирование с несколькими репозиториями
Создайте 2-3 одинаковых репозитория на GitHub с одним и тем же одностраничником. Для каждого включите GitHub Pages. Затем настройте бесплатный балансировщик, например, через Cloudflare Load Balancer (в бесплатном тарифе - простой раунд-робин) или через сервис jsDelivr (для статики). Альтернатива - использовать Netlify (бесплатно до 100 ГБ трафика) как единую точку входа с автоматической балансировкой.
4. Использование Netlify вместо GitHub Pages
Netlify предлагает более высокие лимиты (до 1000 RPS на бесплатном тарифе) и встроенный CDN. Просто подключите репозиторий к Netlify - он сам обработает всплески трафика. Это проще, чем создавать несколько репозиториев.
Бесплатные сервисы для тестирования с разных локаций
Для проверки нагрузки с разных IP используйте Loader.io (бесплатно до 10000 клиентов) или K6 (открытый инструмент, можно запускать с разных облачных инстансов). Также подойдёт Pingdom Tools для базовых тестов.
Дополнительные советы
- Установите CDN-кэширование для всех статических файлов (JS, CSS, изображения).
- Используйте GitHub Actions для автоматической синхронизации нескольких репозиториев при обновлении кода.
- Рассмотрите Vercel как альтернативу - он также бесплатен и устойчив к пикам.
Если ваш одностраничник живёт всего 3 месяца, оптимальное решение - Cloudflare + GitHub Pages или сразу Netlify. Это избавит от 429 ошибок без сложной инфраструктуры.