Как принудительно сбросить кэш на CDN?

Ответ

Принудительный сброс кэша CDN — стандартная операция при развертывании обновлений. Я использую несколько подходов в зависимости от провайдера и задачи:

1. Полная инвалидация (Purge Everything) Используется при крупных релизах. Пример для AWS CloudFront через AWS CLI:

aws cloudfront create-invalidation 
    --distribution-id E1A2B3C4D5E6F7 
    --paths "/*"

Для Cloudflare через API:

curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/purge_cache" 
     -H "Authorization: Bearer API_TOKEN" 
     -H "Content-Type: application/json" 
     --data '{"purge_everything":true}'

2. Селективная инвалидация по путям Эффективна для точечных обновлений. Сбрасываю только измененные ресурсы:

# CloudFront
aws cloudfront create-invalidation 
    --distribution-id E1A2B3C4D5E6F7 
    --paths "/css/main.css" "/js/app.js"

# Или с шаблонами
--paths "/images/products/*.jpg"

3. Версионирование ассетов (Cache Busting) Автоматизирую через сборку, чтобы избежать ручных сбросов. Добавляю хэш к именам файлов:

# Исходный файл: app.js
# После сборки: app.a1b2c3d4.js
# В HTML: <script src="/static/app.a1b2c3d4.js"></script>

Это реализуется через Webpack, Vite или аналогичные инструменты.

Ключевые практики:

  • Проверяю TTL настроек CDN перед сбросом
  • Учитываю лимиты провайдера (например, CloudFront — 1500 путей в месяц бесплатно)
  • Ожидаю задержку распространения (от 30 секунд до 10 минут)
  • Интегрирую с CI/CD — сброс кэша выполняется автоматически после успешного деплоя
  • Мониторю статус инвалидации через API провайдера

Ответ 18+ 🔞

Да ты посмотри, какой у нас тут учебник по сбросу кэша развернули! Ну ладно, сейчас я тебе на пальцах объясню, как эту магию делают, чтобы у пользователей не торчал из браузера вчерашний, прости господи, контент.

1. Полный разнос всего и вся (Purge Everything) Это когда ты такой: «ёпта, всё нахуй, сжигаем мосты». Берёшь и выпиливаешь весь кэш под ноль. Идеально, когда у тебя релиз крупный, и старые файлы могут только навредить. Вот, смотри, как это на AWS CloudFront делается — команда одна, зато эффект огонь:

aws cloudfront create-invalidation 
    --distribution-id E1A2B3C4D5E6F7 
    --paths "/*"

А вот для Cloudflare — тут уже через их API надо стучаться. Тоже ничего сложного, главное — токен не потеряй, а то доверия ебать ноль к тебе после этого будет.

curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/purge_cache" 
     -H "Authorization: Bearer API_TOKEN" 
     -H "Content-Type: application/json" 
     --data '{"purge_everything":true}'

2. Точечный удар по путям А это для хитрожопых, кто не хочет весь трафик грузить заново. Допустим, ты только CSS-файлик поправил. Ну и зачем тогда весь сайт сбрасывать? Берёшь и бьёшь точно в цель:

# CloudFront
aws cloudfront create-invalidation 
    --distribution-id E1A2B3C4D5E6F7 
    --paths "/css/main.css" "/js/app.js"

# Или, если у тебя там целая пачка картинок поменялась, можно и так
--paths "/images/products/*.jpg"

3. Версионирование — чтобы вообще не париться А это, дружище, высший пилотаж. Ты такой: «да похуй на ручные сбросы». Суть в чём? Ты к имени каждого файла прикручиваешь уникальную приблуду, обычно хэш. Старый app.js умирает, а на его месте рождается app.a1b2c3d4.js. Браузер видит новый URL и качает свежачок, даже не вспоминая про старый кэш. Делается это на этапе сборки — Webpack, Vite или что там у тебя. Гениально и просто.

На что смотреть, чтобы не обосраться:

  • TTL проверь, ёпта! Перед тем как всё взрывать, глянь, на сколько у тебя кэш заточен. А то будешь потом удивляться, почему ничего не обновилось.
  • Лимиты провайдера — это святое. Тот же CloudFront первые 1500 путей в месяц бесплатно даёт, а дальше — плати, чувак. Не вылети в трубу.
  • Терпения наберись. Распространение — не мгновенное. Где-то 30 секунд, а где-то и 10 минут ждать придётся. Волнение ебать — но это норма.
  • В CI/CD интегрируй. Идеальный мир — это когда после успешного деплоя твой пайплайн сам всё почистил. Руками тыкать — это распиздяйство.
  • Статус мониторь. Не пускай на самотёк. Дёргай API провайдера, чтобы убедиться, что процесс инвалидации таки завершился, а не накрылся медным тазом где-то посередине.

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