Что такое 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.
Ответы сервера кэшируются, если
- Запрос не содержит заголовка
Authorization
- Запрошенный файл имеет формат из списка выше, ИЛИ запрос содержит заголовок
Accept
с указанием типа статического контента (начинается сimage
,audio
,video
,text/css
,text/font
), ИЛИ запрос содержит заголовокIf-Modified-Since
илиIf-None-Match
- Ответ содержит заголовок
Last-Modified
,Expires
илиCache-Control
- Ответ содержит заголовок
Content-Length
и его значение не превышает 2048 мегабайт
HTTP-заголовок ответа ddg-cache-status
показывает, отдается ли контент из кэша CDN (статус HIT
) или с целевого сервера (статус MISS
).
Заголовок Accept должен соответствовать регулярному выражению ^(image|audio|video|text\/css|font)
Время кэширования и ревалидация
Для управления кэшированием используются директивы HTTP-заголовка Cache-Control
Время хранения файлов в кэше CDN зависит от свежести (freshness) файла, которая задается одним из способов:
- Если есть директива
s-maxage
, срок свежести файла определяется по его значению - В противном случае используется значение
max-age
Если прямых директив нет, используется эвристическая оценка свежести:
- По разнице между
Expires
иDate
(если Date больше Expires, свежесть равна нулю) - При отсутствии
Expires
/Date
— 10% от разницы междуDate
иLast-Modified
- При отсутствии
Date
/Last-Modified
— 5 минут
Эвристическая оценка свежести всегда находится в диапазоне от 5 минут до 10 суток.
Файл ревалидируется, если его срок жизни истек. По умолчанию срок жизни равен свежести, однако некоторые директивы могут влиять на его формулу:
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-параметров (? или &)
- не заканчивается на *