Настройка Azure CDN: кеширование, HTTPS, purge в CI/CD

Скачки отклика при пиковых нагрузках и рост нагрузки на источник знакомы любому руководителю продукта. Мы настраиваем Azure CDN под ключ: проектируем правила кеширования, включаем защищённое соединение и автоматизируем очистку кеша при каждом выпуске обновлений. Передаём регламенты и схемы — команда сопровождает решение без нас.
Часто задаваемые вопросы

Почему Azure CDN не ускоряет сайт: разбор типовых сбоев

Подключение Azure CDN само по себе не ускоряет сайт. Если правила кеширования, сертификаты и порядок сброса не настроены под реальную структуру статики, метрики не меняются: время ответа прежнее, нагрузка на источник не падает, часть посетителей видит сломанные страницы. Доставка контента — не переключатель, а набор связанных параметров конфигурации.

Самый частый сбой — кеш отдаёт устаревшую версию статики. Узел опирается на заголовки кеширования от источника: если их нет или время жизни выставлено неверно, файлы либо не кешируются, либо остаются в кеше после релиза. После выкладки новой версии браузер получает старый скрипт вперемешку с новым оформлением — интерфейс рассыпается, форма не отправляется.

Второй сбой — HTTPS отваливается на поддомене статики. Сертификат выпущен на основной домен и не покрывает отдельный поддомен, либо отдаётся неполная цепочка сертификатов. Браузер блокирует такие ресурсы: страница открывается, но остаётся без картинок и стилей.

Третий сбой — источник не разгружается. Если узел не отдаёт статику из кеша, каждый запрос уходит на сервер приложения, и пик трафика кладёт его так же, как без доставки контента. Отдельная причина — ручной сброс кеша после релиза: его выполняют не для всех путей, и часть пользователей ещё долго видит смесь версий. Разбираем, как каждый из этих сбоев закрывается.

Что даёт настроенное кеширование: измеримые эффекты

Периметр на Azure CDN меняет профиль нагрузки на источник: часть запросов до него просто не доходит. Ниже — три эффекта, которые видно в метриках после настройки, а не в отчёте о проделанной работе.

Разгрузка источника и снятие пиковой нагрузки

Статику — изображения, шрифты, скрипты, стили — отдаёт ближайшая к пользователю точка присутствия, а не сервер приложения. На источнике остаются запросы к динамике и API, поэтому в пик — запуск кампании, публикация каталога, массовый вход сотрудников — он получает в разы меньше одновременных соединений. Правила кеширования по расширению и отдельный короткий срок жизни для разметки дают предсказуемую долю попаданий вместо «кешируем всё подряд».

Стабильное время отклика страницы при всплесках трафика

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

Единый HTTPS и корректные перенаправления на всех доменах

Сертификат живёт на периметре: продление и смена ключей не зависят от конфигурации веб-сервера. Правило перенаправления сводит основной домен, алиасы и HTTP к одному каноническому виду с сохранением пути и параметров запроса, так что дублей у поисковых роботов не остаётся. Сброс кеша запускается из CI/CD сразу после релиза — обновлённые файлы доступны без ручных действий и без окна, когда часть пользователей видит старую версию.

Профили Azure CDN: сравнение вариантов доставки

Профиль доставки определяет, какие правила кеширования доступны: у стандартного набора это общие настройки, у расширенного — правила по путям, расширениям и заголовкам запроса. Выбор стоит зафиксировать до переключения домена: часть вариантов не взаимозаменяема без смены точки входа.

Вариант Когда подходит Ограничения
Стандартный профиль доставки статика, одинаковая логика для всех разделов общие настройки, правил по путям нет
Профиль с расширенными правилами у API, статики и медиа разный срок жизни правила нужно версионировать и тестировать
Свой обратный прокси с кешем нужен контроль над ключом кеша и инвалидацией отдельный узел, который надо эксплуатировать
Кеш на источнике ответы под авторизацией, приватные данные канал не разгружается, выигрыш только на повторах

Правила кеширования по путям

Правило по пути привязывает поведение к префиксу адреса: /api/ — без кеша, /static/ — час, /media/ — сутки. Первое совпадение обычно останавливает разбор, поэтому исключения ставят выше общих масок, иначе персональные ответы уйдут в общий кеш.

Правила по расширениям файлов

Правила по расширениям (.css, .js, шрифты, изображения) читаются проще и покрывают сборку целиком. Слабое место — адреса без расширения и параметры версии в запросе: их описывают отдельно, иначе после обновления файла клиент получит прежнюю копию.

На практике расширенный профиль поверх кеша на источнике даёт предсказуемый срок жизни статики и сброс через программный интерфейс из сборочного процесса — без ожидания истечения срока после выкладки.

Порядок внедрения: от аудита контента до передачи

Кеширование в Azure CDN настраиваем итерациями: сначала фиксируем, что именно раздаётся, затем описываем правила и только потом включаем основной трафик. Порядок исключает случай, когда кеш уже отдаёт контент, а правила для него ещё не заданы.

  1. Инвентаризация доменов и типов контента. Собираем имена и поддомены, размечаем статику, медиа, файлы сборки и ответы сервисов. Для каждого типа отмечаем, кешируется он или идёт в обход.
  2. Схема кеширования. Задаём сроки хранения по группам файлов, правила учёта строки запроса и поведение при обновлении: версионированные файлы получают длинный срок, точки входа — короткий.
  3. Привязка домена. Подключаем точку присутствия, привязываем домен, сверяем соответствие доменных записей и порядок отдачи.
  4. Сертификат и HTTPS. Выпускаем сертификат, включаем принудительный HTTPS и перенаправления, проверяем цепочку на каждом поддомене.
  5. Очистка кеша в конвейере. Встраиваем шаг очистки после публикации — сборка сама сбрасывает изменившееся, без ручных действий дежурного.
  6. Проверка и передача. Прогоняем сценарии, фиксируем результат, передаём доступы, схему и регламент.

Проверка сценариев

Проверку строим на реальных путях: обновление отдельного файла, полный откат релиза, смена сертификата, очистка по маске. Сценарий считаем пройденным, только когда новая версия видна во всех точках, а старая не возвращается из промежуточных хранилищ.

Первый релиз и передача

Первый релиз ведём с пониженной долей трафика: часть запросов идёт через сеть доставки, часть напрямую. Когда доля попаданий в кеш и время отдачи совпадают с ожидаемыми, переводим весь поток и закрываем этап передачей доступов, схемы и регламента.

Документация, схемы и регламенты после внедрения

После запуска Azure CDN у команды заказчика остаётся комплект документов, по которому изменения вносят без нас. Это же точка входа для нового инженера: по нему видно, почему правило кеширования задано именно так и что произойдёт при откате.

Конфигурация и правила доступа

  • Правила кеширования готовой конфигурацией: файл в репозитории, где по путям и расширениям заданы сроки хранения — статика с длинным сроком, HTML и ответы API с коротким или с полным обходом кеша.
  • Карта точек присутствия: какие узлы обслуживают аудиторию, где включено сжатие и где возможности урезаны, чтобы не закладывать в правила то, что не сработает в части регионов.
  • Настройки HTTPS и перенаправлений: привязка сертификата (управляемый или собственный), принудительный переход с HTTP, минимальная версия TLS, правила перезаписи путей.
  • Матрица доступа: кто меняет правила, кто только смотрит метрики, кто запускает очистку кеша.

Регламент релиза

  • Встроенный шаг очистки кеша: после выкладки конвейер вызывает очистку по маске путей и тегам, дожидается подтверждения и идёт дальше только при успехе — иначе релиз останавливается.
  • Порядок выпуска версий: сборка, выкладка, очистка, прогрев, проверка — с пометкой, какие шаги безопасно повторять.
  • Инструкция по проверке и снятию метрик: контрольные запросы к ключевым путям, состояние кеша в заголовке ответа, доля попаданий и время отклика узлов, с порогами для отката.

Кейс: как разгрузили источник и стабилизировали отклик

Что было до настройки

Витрина с тяжёлой статикой: изображения каталога, стили, скрипты, шрифты. Кеш на Azure CDN жил с одним коротким сроком для всех типов файлов и без привязки к версиям сборки — из кеша отдавалась лишь треть запросов, остальное уходило на источник.

В часы пик отклик рос вместе с трафиком, а после релиза всплывал отдельный класс отказов: разметка на несколько минут ссылалась на файлы, которых на периметре ещё не было.

Что сделали

Развели правила кеширования по типам контента: версионированные файлы сборки получили длинный срок жизни, HTML — короткий с обязательной ревалидацией, ответы API исключили из кеша. В конвейер добавили шаг очистки — кеш инвалидируется по маскам после публикации артефактов и до переключения трафика.

Какие метрики получили

Доля попаданий в кеш выросла с трети до большинства — около четырёх пятых запросов. Обращений к источнику стало примерно втрое меньше, и отклик при пике перестал расти: время ответа держится на уровне внепиковых часов.

Класс «битая статика после релиза» закрыт — окно рассогласования между выкладкой и инвалидацией устранено. Откатов не потребовалось: прежние артефакты живут в кеше до конца срока, поэтому возврат на предыдущую версию остаётся мгновенным.

Чем отличается очистка кеша от версионирования статики?

В Azure CDN принудительный сброс (purge) удаляет объект с узлов присутствия, не дожидаясь истечения срока жизни кеша. Операция асинхронная: ответ приходит сразу, а расходится по узлам минутами, поэтому между выкаткой и гарантированно новым контентом остаётся окно. Задаётся сброс по точному пути или по маске — маска удобнее, но задевает всё совпавшее с шаблоном.

Версионирование статики решает ту же задачу иначе: сборка кладёт хэш в имени файла, а разметка ссылается на новый адрес. Прежний файл остаётся доступным, новый на узлах ещё не встречался — инвалидация не нужна в принципе. Побочный эффект — старые версии копятся в хранилище, поэтому их вычищают отдельным правилом жизненного цикла.

Выбор диктует изменяемость имени. Скрипты, стили, шрифты и изображения версионируются, им ставится долгий срок жизни с признаком неизменяемости — браузер перестаёт переспрашивать. Адреса с фиксированным именем — разметка, манифест, конфигурации — так не версионируются, для них остаётся только сброс.

На практике это две политики в одной раздаче. Разметку отдают с коротким сроком жизни и сбрасывают по маске из конвейера сборки, ассеты — с длинным и без сброса вообще. Очистка кеша по маске вроде каталога со всеми ассетами рискованна: массовая инвалидация гонит трафик на источник и легко попадает на пик нагрузки.

Итог: смена имени — норма для собираемых файлов, сброс — для фиксированных адресов. Смешивать обе стратегии в одном правиле не стоит.

Частые технические вопросы по кешу и HTTPS

Кеш на кромке не отменяет логику приложения: сначала источник решает, зависит ли ответ от пользователя, и только потом ответ попадает в хранилище кромки. Поэтому почти все сомнения при передаче настроек — про то, где проходит граница между статикой и персональным ответом, и кто ей управляет: правило на кромке или заголовки источника.

Ниже — пять вопросов, которые чаще всего всплывают на приёмке и в первые недели эксплуатации.

Динамические страницы с персонализацией вообще можно кешировать?

Можно, но выборочно. Запросы с авторизационными cookie и заголовком авторизации уходят в обход кеша, кешируются только анонимные GET. Для персональных страниц источник отдаёт запрет на хранение — тогда кромка не держит ответ ни секунды, и данные не утекают между пользователями.

Почему после релиза часть пользователей видит старую версию страницы?

Расхождение версий возникает, когда разметка и файлы интерфейса живут с разным временем жизни. Разметку отдаём с коротким временем жизни, а файлы — с длинным и хешем в имени, чтобы старый и новый наборы не смешивались в одной странице. Сброс кеша по изменившимся путям выполняется в конвейере сборки до переключения трафика: инвалидация расходится по узлам не мгновенно.

Что произойдёт с сайтом при продлении сертификата?

Управляемый сертификат продлевается автоматически, если домен указывает на кромку записью CNAME и не проксируется сторонним сервисом — проверка владения проходит по DNS. С собственным сертификатом новый загружается заранее, а прежний остаётся активным до окончания перекрытия: разрыв соединения и предупреждения в браузере не возникают.

Правки на источнике не появляются — что проверять первым?

Сначала заголовки самого источника: они приоритетнее правил кромки. Затем — входит ли строка запроса в ключ кеша: при её отсутствии адреса с разными параметрами отдают один и тот же ответ. И третье — не слишком ли широко правило обхода по cookie, из-за которого кеш не наполняется вовсе.

Как убедиться, что кеш действительно работает?

Смотрим признак попадания и возраст ответа в заголовках, а не только время загрузки в браузере. Проверяем из нескольких регионов и по разным типам файлов, затем закрепляем в конвейере проверку: после сброса кеша ответ должен обновиться. Так регресс настройки ловится до жалоб пользователей.

Обсудим задачу: что подготовить к старту работ

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

  • Перечень доменов и поддоменов — с пометкой, какие отдают статику, какие проксируют API и не должны кешироваться вовсе. Отдельно — планы по новым именам и порядку привязки сертификатов.
  • Типы контента и доли статики — какие пути кешируем долго, какие перепроверяем на каждом запросе, где контент меняется часто. Это определяет правила по расширениям, путям и заголовкам ответа.
  • Схема окружений — сколько сред, как стенды отделены от продакшена, нужны ли отдельные профили и как распределяется трафик между источниками.
  • Текущее состояние HTTPS — где выпускаются сертификаты, есть ли собственные, требуется ли принудительная переадресация и минимальная версия протокола.
  • Порядок выпуска версий — как сегодня выкладываются сборки, чем запускается сброс кеша и что должно произойти при откате на предыдущую версию.
  • Правила доступа и роли — кто управляет профилем, как выдаются права и на какие среды, нужна ли изоляция между командами.
  • Ограничения источников — закрытые хранилища, балансировщики, ограничения по географии и требования к журналам запросов.

Опишите задачу в этом объёме — вернёмся с оценкой и планом работ, включая схему кеширования, порядок подключения HTTPS и шаг сброса кеша в конвейере выпуска.

  • Кешируют сайт целиком, вместе со страницами личного кабинета и корзиной — посетители получают чужие данные и устаревшие состояния заказа.
  • Не разделяют статику и динамику: одинаковые правила для картинок и для откликов сервиса, из-за чего либо ускорения нет, либо ответы «залипают» и не обновляются.
  • Назначают срок хранения «на глаз», без учёта того, как часто меняется контент, и потом вручную чистят кеш после каждой правки.
  • Очистку после выкладки делают руками или забывают добавить в конвейер сборки — часть посетителей ещё долго видит прежнюю версию.
  • Не проверяют цепочку сертификатов и перенаправление на защищённое соединение: часть страниц грузится по незащищённому каналу, браузер показывает предупреждение, посетитель уходит.
  • Оставляют открытым доступ к исходному серверу — роботы и посетители обходят ускоритель по прямому адресу и получают медленный или устаревший ответ.
  • Не следят за долей попаданий в кеш и не смотрят на поведение после правок: непонятно, работает ли ускорение вообще и не деградировало ли оно после очередного обновления.
  • Сваливают в один профиль Azure CDN несколько несвязанных сайтов и окружений: сбой правил на одном проекте роняет ускорение на остальных, а разграничить ответственность внутри команды уже нельзя.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139