Что такое CDN
СDN — сеть доставки контента (англ. Content Delivery Network) — представляет собой совокупность геораспределенных серверов, на которых кэшируется статический контент веб-ресурсов.
Когда пользователь запрашивает кэшируемые данные, они загружаются с ближайшего узла CDN, а не с целевого сервера. Наличие множества физических точек присутствия снижает время доставки контента до посетителей и ускоряет работу веб-приложения или сайта.
Подробнее о CDN DDoS-Guard — в разделе Технологии
Подключение к CDN
CDN включен по умолчанию для всех клиентов DDoS-Guard. Управление, в том числе включение и выключение кэширования, доступно в общих настройках домена (для услуги «Защита сайта» и облачных услуг) или правила перехвата (для «Защиты сети» с L7).
Требования к контенту
Кэшируются файлы форматов .js, .css, .ejs, .png, .jpg, .jpeg, .gif, .ico, .bpm, .svg, .svgz, .cur, .pict, .tif, .tiff, .eps, .ttf, .eot, .otf, .woff, .woff2, .swf, .mp3, .mp4, .ogg, .wav, .webm, .webp, .avi, .flv, .mov, .pls, .midi, .mid, .mkv, .m4v, .ts, .m3u8, .txt, .exe, .zip, .xz, .gz, .lzma, .7z, .rar, .class, .jar, .tar, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .pdf, .rtf, .csv, .ps, .odt, .ods, .odp, .odg, .zst.
Ответы сервера кэшируются, если выполняются все условия:
- Запрос не содержит заголовка
Authorization - Запрошенный файл имеет формат из списка выше, ИЛИ запрос содержит заголовок
Accept* с указанием типа статического контента (начинается сimage,audio,video,text/css,text/font), ИЛИ запрос содержит заголовокIf-Modified-SinceилиIf-None-Match - Ответ содержит заголовок
Last-Modified,ExpiresилиCache-Control - Ответ содержит заголовок
Content-Lengthи его значение не превышает 2048 мегабайт
* Заголовок Accept проверяется регулярным выражением ^(image|audio|video|text\/css|font)
HTTP-заголовок ответа ddg-cache-status показывает, отдается ли контент из кэша CDN (статус HIT) или с целевого сервера (статус MISS).
Время кэширования и ревалидация
Для управления кэшированием используются директивы HTTP-заголовка Cache-Control
Период, в течение которого CDN отдает файл без ревалидации, определяется на основе срока свежести (freshness lifetime) файла, который задается одним из способов:
- Если есть директива
s-maxage, срок свежести файла определяется по его значению - В противном случае используется значение
max-age - По разнице между
ExpiresиDate(если Date больше Expires, свежесть равна нулю)
Если прямых директив нет, для вычисления срока свежести используется эвристическая оценка:
- При отсутствии
Expires/Date— свежесть равна 10% от разницы междуDateиLast-Modified - При отсутствии
Date/Last-Modified— свежесть равна 5 минутам
Эвристическая оценка свежести всегда находится в диапазоне от 5 минут до 10 суток.
Пока срок свежести больше текущего возраста (age) файла в кэше, файл считается свежим и может быть отдан из кэша без ревалидации (обращения на сервер-источник).
Свежесть файла не гарантирует фактическое хранение на кэширующем сервере — файлы, которые запрашивают редко, периодически выгружаются из кэша, чтобы освободить место для более востребованного контента
После истечения срока свежести файл перед отдачей будет ревалидирован. Некоторые директивы могут менять это поведение:
min-fresh— ревалидировать, когда до завершения времени свежести объекта останется min-fresh секунд (уменьшает фактический срок жизни файла)max-stale— отдавать из кэша даже несвежий файл в течении max-stale секунд (увеличивает фактический срок жизни файла)
Очистка кэша
В разделе Настройки CDN (Домен → Общие настройки) вы можете включить и отключить кэширование статического контента на серверах DDoS-Guard, а также Очистить кэш.
Очистка кэша удалит все закэшированные на узлах нашей CDN файлы, и при первом обращении пользователя будут загружены их актуальные версии.
Сброс кэша по маске
Для некоторых тарифов и услуг доступен сброс кэша по маске — запрос на удаление из кэша только файлов, адрес которых соответствует маске.
Маска должна соответствовать требованиям:
- Содержит домен и хотя бы 4 символа (маска
*— исключение из правила, такая маска работает как общая очистка кэша) - Содержит не более 1024 символов
- Содержит только ASCII-символы
- Не включает schema (
http://|http:,https://,//), порт (:8080), логин или пароль (user:pass), fragment (#fragment)
Примеры маски:
*— сбросить кэш для всех файлов на всех поддоменах и на основном доменеexample.com— сбросить кэш для домена example.com.example.com— сбросить кэш для всех поддоменов example.com, но не для основного доменаapi.*.example.com/js/*.js— сбросить кэш для всех поддоменов, которые соответствуют маске (например, api.fl.example.com/js/vue/form/login.js)
В конец маски будет подставлен слеш (/), если маска
- не заканчивается на слеш (/)
- не содержит GET-параметров (? или &)
- не заканчивается на *