Кеширование в CDN: TTL, правила, инвалидация
Кеширование — это то, ради чего CDN и существует. Без правильного кеша CDN просто пересылает запросы на ваш сервер, не ускоряя ничего. С правильным кешем — 90% трафика обрабатывается на стороне CDN, а сервер разгружен.
Но кеш — это сложно. Что кешировать, на какой срок, как обновлять, когда пользователи должны видеть свежие данные — всё это требует настройки. В этой статье — разбор кеширования в CDN: TTL, правила, инвалидация, версионирование. Если нужно настроить кеширование в CDN — поможем.
Что такое кеширование
Кеширование — это сохранение копий контента на серверах CDN. Когда пользователь запрашивает файл, CDN проверяет, есть ли он в кеше:
- Cache HIT: файл есть — отдаётся мгновенно с CDN;
- Cache MISS: файла нет — CDN запрашивает у вашего сервера, отдаёт пользователю и сохраняет копию;
- Cache EXPIRED: файл устарел — CDN запрашивает у сервера обновлённую версию.
Цель — максимизировать HIT и минимизировать MISS. Чем больше HIT, тем быстрее сайт и меньше нагрузка на сервер.
💡 Важно
Хороший сайт с правильно настроенным CDN имеет cache hit rate 80–95%. Если ниже 50% — кеш работает плохо, нужно проверить настройки.
Что кешировать
Не всё нужно кешировать. Вот что кешируется всегда.
Изображения
JPG, PNG, WebP, SVG, GIF. Меняются редко — можно кешировать надолго.
CSS и JavaScript
Стили и скрипты. Статика, меняется редко.
Шрифты
WOFF, WOFF2, TTF. Меняются редко, можно кешировать надолго.
Документы
PDF, DOC, XLS. Реже меняются, можно кешировать.
Видео
MP4, WebM, HLS-сегменты. Кешировать обязательно, трафик большой.
Статические страницы
HTML, который не меняется для разных пользователей. Можно кешировать с осторожностью.
Что не кешировать
Некоторые данные кешировать нельзя — это приведёт к багам и проблемам.
- Авторизованные страницы: личный кабинет, админка, панель управления;
- Персональные данные: информация конкретного пользователя;
- Корзина и checkout: данные зависят от пользователя;
- Формы и POST-запросы: отправка данных не кешируется;
- Динамический контент: чат, уведомления, свежие данные;
- Cookies и заголовки авторизации: индивидуальные для каждого.
Если случайно закешировать авторизованную страницу — один пользователь увидит данные другого. Это критичная ошибка безопасности.
⚠️ Важно
Никогда не кешируйте страницы с параметром Authorization или cookies сессии. Это может привести к утечке персональных данных между пользователями.
TTL
TTL (Time To Live) — это срок жизни кеша. Сколько времени CDN хранит копию, прежде чем запросить свежую версию.
Как выбрать TTL
- Долгий TTL (1 год): для неизменяемых файлов — изображения, шрифты, версионированные CSS/JS;
- Средний TTL (1 день — 1 неделя): для файлов, которые меняются редко;
- Короткий TTL (5–60 минут): для динамического контента, HTML;
- Очень короткий TTL (0–60 секунд): для данных, которые должны быть свежими.
Рекомендуемые значения
| Тип контента | Рекомендуемый TTL |
|---|---|
| Изображения, шрифты | 1 год |
| CSS, JS (версионированные) | 1 год |
| CSS, JS (без версии) | 1 неделя |
| HTML (публичный) | 1 час |
| API-ответы | 1–15 минут |
| JSON, XML (фиды) | 15 минут |
| Динамический контент | 0 (не кешировать) |
Слишком короткий TTL — нет эффекта от кеша. Слишком длинный — пользователи видят устаревший контент.
Cache-Control заголовки
CDN ориентируется на заголовки, которые отдаёт ваш сервер. Основные:
Cache-Control
- public: контент можно кешировать;
- private: только в браузере, не в CDN;
- no-cache: кешировать, но проверять актуальность;
- no-store: не кешировать вообще;
- max-age=3600: кешировать 1 час;
- s-maxage=86400: для CDN — 1 день;
- stale-while-revalidate=60: отдавать старую версию, пока обновляется;
- immutable: файл не меняется, кешировать максимально долго.
Примеры
- Изображения:
Cache-Control: public, max-age=31536000, immutable; - CSS/JS с версией:
Cache-Control: public, max-age=31536000, immutable; - HTML:
Cache-Control: public, max-age=3600; - API:
Cache-Control: public, max-age=60, stale-while-revalidate=30; - Авторизованная страница:
Cache-Control: private, no-cache.
ETag и Last-Modified
Эти заголовки позволяют CDN проверить, изменился ли файл, и использовать кеш, если нет. Экономит трафик и ускоряет работу.
Правила кеша
Правила кеша в CDN позволяют настроить разное поведение для разных типов контента.
Пример правил
| Паттерн | Действие | TTL |
|---|---|---|
| *.jpg, *.png, *.webp | Кешировать | 1 год |
| *.css, *.js | Кешировать | 1 год (с версией) |
| *.woff2, *.woff | Кешировать | 1 год |
| /api/public/* | Кешировать | 5 минут |
| /api/* | Не кешировать | 0 |
| /admin/* | Не кешировать | 0 |
| /cart/*, /checkout/* | Не кешировать | 0 |
| *.html | Кешировать | 1 час |
Правила задаются в панели CDN или через API. Они позволяют гибко управлять кешем для разных частей сайта.
Инвалидация кеша
Иногда нужно срочно обновить контент в кеше — например, при смене логотипа или исправлении ошибки. Это называется инвалидация или purge.
Способы инвалидации
- По URL: очистить кеш для конкретного файла. Самый точный способ;
- По тегу: если файлы помечены тегами, можно очистить всю группу;
- По всему кешу: полная очистка. Используется редко, дорого;
- Wildcard: очистить все URL, подходящие под шаблон;
- Через API: автоматизация инвалидации при обновлениях.
Когда нужна инвалидация
- Обновление контента: вы заменили изображение или файл;
- Исправление ошибки: нашли проблему, нужно срочно обновить;
- Публикация новости: статья должна появиться сразу;
- Смена конфигурации: изменили настройки, нужно сбросить кеш.
Автоматизация
Хорошая практика — автоматизировать инвалидацию при деплое. Например, при обновлении сайта автоматически вызывать API CDN для очистки кеша конкретных URL.
Версионирование
Версионирование — это добавление версии к имени файла. Например, style.css?v=1.2.3 или style.1.2.3.css.
Зачем нужно
- Обход кеша: при изменении файла меняется URL — CDN загружает новую версию;
- Долгий TTL: можно кешировать файлы на год, но при обновлении менять версию;
- Без инвалидации: не нужно вызывать purge при каждом обновлении;
- Простота: всё автоматизируется в сборке (Webpack, Vite).
Как работает
- При сборке: хеш файла добавляется в имя — style.a1b2c3.css;
- При обновлении: хеш меняется — style.d4e5f6.css;
- CDN: видит новый URL, загружает новую версию;
- Пользователь: получает свежий файл без проблем.
Стратегии
- Query string:
style.css?v=1.2.3— просто, но некоторые CDN кешируют без учёта query; - Путь:
/static/v1.2.3/style.css— работает везде; - Хеш в имени:
style.a1b2c3.css— идеально, автоматизируется.
Stale-While-Revalidate
Stale-While-Revalidate — это техника, при которой CDN отдаёт старую версию файла, пока в фоне обновляет свежую. Пользователь не ждёт.
Как работает
- TTL истёк: файл устарел;
- Первый запрос: CDN отдаёт старую версию мгновенно;
- В фоне: CDN запрашивает свежую версию у сервера;
- Следующий запрос: свежая версия уже в кеше.
Преимущества
- Скорость: пользователь всегда получает контент мгновенно;
- Актуальность: в фоне кеш обновляется;
- Разгрузка: сервер получает меньше запросов.
Настройка
Заголовок: Cache-Control: max-age=60, stale-while-revalidate=300
- max-age=60: кеш живёт 60 секунд;
- stale-while-revalidate=300: в течение 300 секунд после истечения можно отдавать старую версию, пока обновляется.
Ошибки
Кешировать всё
Кеширование авторизованных страниц, корзины, checkout. Приводит к утечке данных и багам.
Слишком долгий TTL
Обновили файл, а пользователи видят старую версию полгода. Нужен разумный TTL.
Слишком короткий TTL
Кеш не работает — CDN постоянно обращается к серверу. Нет ускорения.
Нет версионирования
Обновляете файл без смены URL — пользователи видят старую версию.
Нет инвалидации
Не настроена очистка кеша при обновлениях. Пользователи видят устаревший контент.
Игнорирование Cache-Control
Сервер не отдаёт правильные заголовки. CDN не знает, что кешировать.
Наши рекомендации
📌 Что вы получаете, заказывая настройку кеша у нас
- Правила кеша — под ваш контент
- TTL — оптимальный для каждого типа
- Версионирование — в сборке
- Инвалидацию — автоматическую при деплое
- Stale-While-Revalidate — для быстрой отдачи
- Мониторинг — cache hit rate
🔹 Оставьте заявку на настройку кеша
Хотите максимально быстрый сайт? Оставьте заявку на бесплатную консультацию.
📌 Итоговый вывод
Кеширование в CDN — это то, что делает CDN полезным.
Что нужно знать:
- Что кешировать — изображения, CSS/JS, шрифты, видео, документы
- Что не кешировать — авторизованные страницы, корзина, checkout, API с приватными данными
- TTL — 1 год для статики, 1 час для HTML, 5 минут для API
- Cache-Control — public, private, no-cache, max-age, s-maxage
- Правила кеша — по типам файлов и путям
- Инвалидация — по URL, тегам, через API
- Версионирование — хеш в имени файла
- Stale-While-Revalidate — быстрая отдача + фоновое обновление
- Ошибки — кешировать всё, слишком долгий/короткий TTL, нет версионирования
Хотите настроить кеш? Закажите консультацию в Lead Hub.
Также рекомендуем: что такое CDN, CDN vs сервер, защита от DDoS, CDN для видео, стоимость CDN, CDN.