Что такое CDN и зачем он нужен
CDN (Content Delivery Network) — географически распределённая сеть серверов, которая кэширует и раздаёт контент вашего сайта с ближайшего к пользователю узла.
Представьте: ваш сервер в Москве, а пользователь во Владивостоке. Без CDN каждый запрос летит через всю страну (RTT ~100-150 мс). С CDN контент отдаётся с узла в Хабаровске — задержка падает до 10-20 мс.
Что даёт CDN
- Скорость: TTFB снижается на 60-80%, LCP улучшается на 40-60%
- Отказоустойчивость: если один узел падает, трафик идёт на другой
- Защита: CDN поглощает DDoS-атаки, скрывает IP origin-сервера
- Экономия: нагрузка на origin снижается на 70-90%
Когда CDN нужен, а когда нет
CDN нужен если:
- Аудитория географически распределена
- Много статического контента (изображения, CSS, JS, видео)
- Высокие требования к скорости (e-commerce, медиа, SaaS)
- Нужна защита от DDoS и скрытие origin
- Пиковые нагрузки (распродажи, вирусный контент)
CDN избыточен если:
- Локальный бизнес с аудиторией в одном городе
- Внутренний корпоративный портал
- Сайт без статики (чистый API с динамикой)
- Бюджет критичен, а трафик минимальный
Совет: Если сомневаетесь — начните с бесплатного тарифа Cloudflare. Этого достаточно для большинства сайтов до 100k визитов/месяц.
Критерии выбора CDN-провайдера
1. География PoP (Points of Presence)
Проверьте, есть ли узлы CDN там, где живёт ваша аудитория. Для России важны точки в Москве, Питере, регионах.
2. Ценообразование
Модели разные: за трафик ($/GB), за запросы, фиксированная плата. Считайте TCO для вашего профиля нагрузки.
3. Функционал безопасности
Минимум: DDoS-защита, WAF, SSL/TLS. Плюсом: Bot Management, Rate Limiting.
4. Возможности кэширования
Cache Rules, Purge API, Cache Tags, Vary по headers.
5. Интеграции
Terraform, Kubernetes Ingress, CI/CD webhooks.
Популярные провайдеры
- Cloudflare — PoP в Москве, бесплатный тариф, WAF
- Fastly — быстрый purge, Edge Computing, без PoP в РФ
- Bunny CDN — дёшево ($1/TB), базовый WAF
- Selectel CDN — PoP в Москве и СПб, рублёвые цены
Пошаговая настройка CDN
Оптимизация кэширования
# Статика — кэшировать агрессивно
location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000, immutable";
}
# HTML — не кэшировать
location ~* \.html$ {
add_header Cache-Control "no-cache, must-revalidate";
}
# API — не кэшировать
location /api/ {
add_header Cache-Control "no-store";
}
Версионирование статики
Добавляйте хэш в имена файлов: app.a1b2c3.js вместо app.js. Это позволяет кэшировать навечно и автоматически инвалидировать при изменениях.
Purge стратегия
Используйте Cache Tags для групповой инвалидации. Например, тег product-123 на всех страницах товара.
Частые ошибки и решения
Origin IP раскрыт
Проблема: Атакующий обходит CDN, обращаясь напрямую к origin.
Решение: Настройте firewall — разрешите входящие только с IP CDN.
Кэшируется динамика
Проблема: Корзина показывает данные другого пользователя.
Решение: Исключите /cart, /account, /api из кэша.
Старый контент после деплоя
Проблема: Пользователи видят старую версию.
Решение: Версионируйте статику или настройте purge в CI/CD.
Частые вопросы
Нужна помощь с настройкой CDN?
Настроим CDN под ваш проект: выбор провайдера, оптимизация кэширования, интеграция с DDoS-защитой.