Как избежать ошибки 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 ошибок без сложной инфраструктуры.

    Часто задаваемые вопросы