Содержание

CDN (Content Delivery Network) — это сеть серверов по всему миру, которые хранят копии файлов и страниц вашего сайта и отдают их пользователям с ближайшего узла. Она ускоряет загрузку, снимает нагрузку с основного сервера и защищает от части атак. Почти любому публичному сайту CDN нужна как минимум для статики: картинок, скриптов и стилей.

Разберём, как работает CDN, что можно кешировать, как управлять кешем и какие ошибки чаще всего допускают.

Как работает CDN?

Когда пользователь запрашивает файл, запрос попадает на ближайший к нему узел CDN. Если копия файла там есть, узел отдаёт её сразу. Если нет — узел запрашивает файл у вашего сервера (его называют origin), сохраняет копию и отдаёт пользователю. Следующие пользователи в этом регионе получат файл уже из кеша.

Что это даёт:

  • меньше задержка — данные проходят сотни километров вместо тысяч;
  • меньше нагрузка — основной сервер отдаёт файл один раз, а не каждому посетителю;
  • устойчивость к пикам — наплыв пользователей принимают узлы CDN;
  • защита — фильтрация вредоносного трафика и сокрытие адреса основного сервера;
  • оптимизация — сжатие, современные форматы изображений и HTTP/2–HTTP/3 из коробки.

Что можно кешировать в CDN?

В CDN кешируют всё, что одинаково для всех пользователей: статические файлы, изображения, публичные страницы и ответы API без персональных данных. Персональные страницы — корзину, личный кабинет, оформление заказа — не кешируют никогда.

Тип контента Кешировать Срок
JS и CSS с хешем в имени файла Да Год
Изображения и шрифты Да Месяцы
Публичные страницы, статьи, каталог Да, с осторожностью Минуты–часы
Публичные ответы API Иногда Секунды–минуты
Корзина, кабинет, оформление заказа Нет —

Про оптимизацию картинок — статья картинки на сайте, а про кеширование на других уровнях — кеширование в веб-приложении.

Курьер передаёт картонную коробку Фото: Unsplash

Как управлять кешем?

Кешем управляют заголовками HTTP, которые отдаёт ваш сервер: они говорят CDN и браузеру, можно ли хранить ответ и как долго. Для статических файлов удобно добавлять хеш содержимого в имя файла — тогда кешировать можно навсегда, а новая версия получит новое имя.

# Статика с хешем в имени — кешировать на год
location /assets/ {
    add_header Cache-Control "public, max-age=31536000, immutable";
}

# Публичные страницы — CDN хранит 10 минут, браузер всегда перепроверяет
location /blog/ {
    add_header Cache-Control "public, max-age=0, s-maxage=600, stale-while-revalidate=60";
}

# Личный кабинет — не кешировать нигде
location /account/ {
    add_header Cache-Control "private, no-store";
}

Правила:

  1. Задавайте разные сроки для статики, страниц и API.
  2. Используйте stale-while-revalidate, чтобы пользователи не ждали обновления кеша.
  3. Сбрасывайте кеш конкретных адресов при изменении контента, а не весь кеш целиком.
  4. Учитывайте cookies и заголовки, от которых зависит ответ, — иначе разным пользователям уйдёт одна версия.

Какие ошибки делают при подключении CDN?

Самая опасная ошибка — кешировать страницы с персональными данными: один пользователь увидит чужой кабинет. Другая частая проблема — основной сервер остаётся доступен напрямую, и атакующие обходят защиту CDN.

  • закешированы страницы, зависящие от cookies или авторизации;
  • после релиза пользователи получают старые скрипты, потому что файлы без хеша в имени;
  • основной сервер открыт для всех, а не только для узлов CDN;
  • сброс всего кеша при каждом изменении — пиковая нагрузка на сервер;
  • не настроены сжатие и HTTP/2, хотя CDN их поддерживает.

Как проверить эффект от CDN?

Эффект проверяют по доле запросов, обслуженных из кеша, времени загрузки страниц из разных регионов и нагрузке на основной сервер. Хорошая доля попаданий в кеш для статики — выше 90%.

  • смотрите отчёт CDN о доле попаданий в кеш;
  • сравните метрики скорости до и после — подробнее в статье Core Web Vitals;
  • проверьте заголовки ответа: CDN обычно пишет, взят ли ответ из кеша;
  • следите за исходящим трафиком основного сервера — он должен заметно снизиться.

Про распределение нагрузки между серверами — статья балансировка нагрузки.

Коротко

  • CDN отдаёт копии контента с ближайшего к пользователю узла.
  • Она ускоряет сайт, разгружает сервер и защищает от части атак.
  • Кешируйте статику надолго, публичные страницы — ненадолго, личные данные — никогда.
  • Управляйте кешем заголовками Cache-Control и хешами в именах файлов.
  • Закройте прямой доступ к основному серверу и проверяйте долю попаданий в кеш.

Частые вопросы

  • Нужна ли CDN, если все пользователи в одном городе?

    Выигрыш в задержке будет меньше, но CDN всё равно разгружает сервер, сжимает и оптимизирует изображения и защищает от простых атак. Для сайта с большим количеством картинок это заметно.

  • Можно ли кешировать в CDN страницы с личными данными?

    Нет. Персональные страницы помечают как приватные и некешируемые. Иначе один пользователь может увидеть кабинет другого — это одна из самых опасных ошибок настройки.

  • Сколько стоит CDN?

    Обычно оплачивается переданный трафик и запросы. Для небольших сайтов это единицы долларов или сотни рублей в месяц, для крупных медиа и магазинов — заметная статья расходов, которую стоит сравнивать между провайдерами.