Содержание
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";
}
Правила:
- Задавайте разные сроки для статики, страниц и API.
- Используйте
stale-while-revalidate, чтобы пользователи не ждали обновления кеша. - Сбрасывайте кеш конкретных адресов при изменении контента, а не весь кеш целиком.
- Учитывайте cookies и заголовки, от которых зависит ответ, — иначе разным пользователям уйдёт одна версия.
Какие ошибки делают при подключении CDN?
Самая опасная ошибка — кешировать страницы с персональными данными: один пользователь увидит чужой кабинет. Другая частая проблема — основной сервер остаётся доступен напрямую, и атакующие обходят защиту CDN.
- закешированы страницы, зависящие от cookies или авторизации;
- после релиза пользователи получают старые скрипты, потому что файлы без хеша в имени;
- основной сервер открыт для всех, а не только для узлов CDN;
- сброс всего кеша при каждом изменении — пиковая нагрузка на сервер;
- не настроены сжатие и HTTP/2, хотя CDN их поддерживает.
Как проверить эффект от CDN?
Эффект проверяют по доле запросов, обслуженных из кеша, времени загрузки страниц из разных регионов и нагрузке на основной сервер. Хорошая доля попаданий в кеш для статики — выше 90%.
- смотрите отчёт CDN о доле попаданий в кеш;
- сравните метрики скорости до и после — подробнее в статье Core Web Vitals;
- проверьте заголовки ответа: CDN обычно пишет, взят ли ответ из кеша;
- следите за исходящим трафиком основного сервера — он должен заметно снизиться.
Про распределение нагрузки между серверами — статья балансировка нагрузки.
Коротко
- CDN отдаёт копии контента с ближайшего к пользователю узла.
- Она ускоряет сайт, разгружает сервер и защищает от части атак.
- Кешируйте статику надолго, публичные страницы — ненадолго, личные данные — никогда.
- Управляйте кешем заголовками Cache-Control и хешами в именах файлов.
- Закройте прямой доступ к основному серверу и проверяйте долю попаданий в кеш.
Частые вопросы
Нужна ли CDN, если все пользователи в одном городе?
Выигрыш в задержке будет меньше, но CDN всё равно разгружает сервер, сжимает и оптимизирует изображения и защищает от простых атак. Для сайта с большим количеством картинок это заметно.
Можно ли кешировать в CDN страницы с личными данными?
Нет. Персональные страницы помечают как приватные и некешируемые. Иначе один пользователь может увидеть кабинет другого — это одна из самых опасных ошибок настройки.
Сколько стоит CDN?
Обычно оплачивается переданный трафик и запросы. Для небольших сайтов это единицы долларов или сотни рублей в месяц, для крупных медиа и магазинов — заметная статья расходов, которую стоит сравнивать между провайдерами.



