CDN — сеть доставки контента

СDN — сеть доставки контента (англ. Content Delivery Network) — представляет собой совокупность геораспределенных серверов, на которых кэшируется статический контент веб-ресурсов.

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

Подробнее о CDN DDoS-Guard — в разделе Технологии

 

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-параметров (? или &)
  • не заканчивается на *