0Pricing
AWS Solutions Architect · Урок

Поведение кэша и настройки TTL

Определите поведение кэша на основе путей, задайте минимальные, стандартные и максимальные значения TTL и используйте заголовки управления кэшем для точной настройки кэширования.

«Поведение кэша и настройки TTL» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 4 уроков всего.

Поведение кэша: что это такое

Поведение кэша — это правила, которые указывают CloudFront, как обрабатывать запросы для разных шаблонов путей URL. Каждое поведение кэша сопоставляет шаблон пути, например /images/*, /api/* или *.css, с определённым источником и конфигурацией кэширования.

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

Сопоставление шаблонов путей

Шаблоны путей поддерживают подстановочные знаки: * соответствует любой комбинации символов, включая косые черты, а ? — одному любому символу. Примеры:

  • /images/* — все URL, начинающиеся с /images/
  • *.jpg — все запросы, заканчивающиеся на .jpg в любой части пути
  • /api/v2/* — все маршруты API v2
  • /static/??.css — статические файлы CSS, в которых перед .css находятся ровно два символа

Поведения проверяются в порядке, указанном в конфигурации дистрибутива. Размещайте более конкретные шаблоны первыми. Поведение по умолчанию (*) всегда проверяется последним.

Политика кэша и политика запросов к источнику

CloudFront разделяет логику кэширования на два типа политик:

  • Политика кэша: определяет, что CloudFront использует в качестве ключа кэша — комбинацию заголовков, строк запроса и файлов cookie, по которой определяется соответствие кэшированного объекта запросу. Также задаёт границы TTL.
  • Политика запросов к источнику: определяет, какие заголовки, строки запроса и файлы cookie пересылаются источнику, даже если они не входят в ключ кэша (это позволяет отправлять источнику заголовки авторизации, не создавая отдельный вариант кэша для каждого токена)

AWS предоставляет управляемые политики, например CachingOptimized и CachingDisabled, подходящие для большинства случаев, либо вы можете создать собственные политики.

Настройки TTL в CloudFront

CloudFront учитывает три значения TTL из политики кэша:

  • Минимальный TTL: минимальное время, в течение которого CloudFront кэширует объект независимо от заголовков источника (по умолчанию 0)
  • TTL по умолчанию: время, в течение которого CloudFront кэширует объект, если источник не отправляет заголовок Cache-Control или Expires (по умолчанию 86 400 секунд = 1 день)
  • Максимальный TTL: максимальное время кэширования объекта в CloudFront, ограничивающее директиву Cache-Control max-age источника (по умолчанию 31 536 000 секунд = 1 год)

Эти три значения ограничивают фактическую длительность кэширования, заданную источниками с помощью заголовков Cache-Control.

Заголовки Cache-Control от источников

Если источник отправляет заголовок Cache-Control: max-age=3600, CloudFront кэширует объект на 3 600 секунд, при условии что это значение находится между минимальным и максимальным TTL политики кэша. Если источник отправляет Cache-Control: no-cache или Cache-Control: no-store, CloudFront перед каждой выдачей кэшированной копии проверяет источник.

Для статических ресурсов, которые редко изменяются, задайте большое значение max-age, например 31536000 = 1 год, и используйте инвалидацию кэша при изменении версии — включайте хэш содержимого в имена файлов, например app.a3f4b5.js, — чтобы при изменении содержимого URL изменялся и старая кэшированная версия автоматически становилась недействительной.

# S3 object metadata with long cache TTL
aws s3 cp app.a3f4b5.js s3://my-bucket/ \
  --cache-control 'max-age=31536000, immutable' \
  --content-type 'application/javascript'

Разделение статического и динамического поведения

Эффективный шаблон поведения кэша разделяет статическое и динамическое содержимое:

  • /static/*, *.css, *.js, *.jpg → источник S3, политика CachingOptimized (большой TTL, файлы cookie и строки запроса не входят в ключ кэша)
  • /api/* → источник ALB, политика CachingDisabled (данные всегда запрашиваются у источника, все заголовки и файлы cookie пересылаются)
  • /* (по умолчанию) → источник ALB, умеренное кэширование

Так высококэшируемый статический уровень отделяется от динамического уровня API: коэффициент попаданий в кэш для статического содержимого повышается, а ответы API всегда остаются актуальными.

Инвалидация кэша

Если вы обновили содержимое в S3 или у источника и хотите немедленно предоставлять новую версию через CloudFront, не дожидаясь окончания TTL, создайте инвалидацию кэша. Укажите пути для инвалидации, например /images/logo.png или /images/*, и CloudFront удалит эти объекты из всех периферийных кэшей.

Инвалидации платные: первые 1 000 путей в месяц предоставляются бесплатно, а за дополнительные пути взимается плата. Инвалидация с подстановочным знаком, например /*, считается одним путём. Рекомендуется использовать версионируемые имена файлов для статических ресурсов вместо частых инвалидаций, чтобы снизить расходы и задержки.

# Create a cache invalidation for updated images
aws cloudfront create-invalidation \
  --distribution-id EDFDVBD6EXAMPLE \
  --paths '/images/logo.png' '/css/main.css'

Компоненты ключа кэша

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

  • Строки запроса: /search?q=aws и /search?q=s3 являются отдельными записями кэша, если q входит в ключ кэша
  • Заголовки: включение Accept-Encoding позволяет CloudFront отдельно кэшировать версии с gzip и без gzip
  • Файлы cookie: включение файлов cookie сеанса создаёт отдельные записи кэша для каждого пользователя и фактически отключает кэширование

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

Сжатие на периферии

CloudFront может автоматически сжимать текстовые объекты (HTML, CSS, JavaScript, JSON) с помощью gzip или Brotli перед доставкой пользователям. Это уменьшает размер передаваемых данных на 60–80 % и ускоряет загрузку страниц без каких-либо изменений в источнике.

Чтобы включить сжатие, убедитесь, что политика кэша включает Accept-Encoding в ключ кэша (CloudFront необходимо отдельно кэшировать версии с gzip и без gzip), и включите параметр Compress Objects Automatically в поведении кэша. CloudFront сжимает объекты размером более 1 000 байт и менее 10 MB.

Коэффициент попаданий в кэш и мониторинг

Коэффициент попаданий в кэш — это процент запросов, обслуженных из кэша CloudFront без обращения к источнику. Высокий коэффициент (80 % и более) означает меньшие расходы на источник и более высокую производительность. Отслеживайте его с помощью отчёта Cache Statistics в консоли CloudFront или метрики CloudWatch CacheHitRate.

Способы повысить коэффициент попаданий в кэш: увеличьте значения TTL, уменьшите число заголовков и файлов cookie в ключе кэша, используйте нормализацию строк запроса (пересылайте только строки запроса, которые действительно использует ваше приложение) и задайте подходящие заголовки Cache-Control у источника.

# Get CloudFront metrics for cache hit rate
aws cloudwatch get-metric-statistics \
  --namespace AWS/CloudFront \
  --metric-name CacheHitRate \
  --dimensions Name=DistributionId,Value=EDFDVBD6EXAMPLE \
  --start-time 2026-06-19T00:00:00Z \
  --end-time 2026-06-20T00:00:00Z \
  --period 3600 \
  --statistics Average \
  --region us-east-1

Настройки источника и протокола для каждого поведения

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

  • /static/* → источник S3 (закрытый сегмент через OAC)
  • /api/* → источник ALB в us-east-1
  • /media/* → источник CDN MediaPackage для потоковой передачи видео

Для каждого поведения также отдельно настраиваются политика протокола пользователя, разрешённые методы HTTP и связи с функциями (CloudFront Functions или Lambda@Edge). Благодаря этому один дистрибутив становится гибким многоцелевым уровнем доставки.

Краткая проверка

Проверьте своё понимание концепций AWS Solutions Architect (SAA-C03) из этого урока.

Итоги урока

В этом уроке вы узнали, что поведения кэша сопоставляют шаблоны путей URL с источниками и правилами кэширования, минимальный, заданный по умолчанию и максимальный TTL ограничивают время хранения содержимого в кэше, а при наличии заголовков Cache-Control источника они имеют приоритет; инвалидации кэша немедленно удаляют устаревшее содержимое из всех периферийных расположений. Минимизируйте компоненты ключа кэша, чтобы повысить коэффициент попаданий. Далее мы рассмотрим подписанные URL, подписанные файлы cookie и географические ограничения.

Часто задаваемые вопросы

Урок «Поведение кэша и настройки TTL» бесплатный?

Да — полный текст урока «Поведение кэша и настройки TTL» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.

Чему я научусь в уроке «Поведение кэша и настройки TTL»?

Определите поведение кэша на основе путей, задайте минимальные, стандартные и максимальные значения TTL и используйте заголовки управления кэшем для точной настройки кэширования. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AWS Solutions Architect?

Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Поведение кэша и настройки TTL»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AWS Solutions Architect?

Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Дистрибутивы и источники CloudFront
  2. Поведение кэша и настройки TTL
  3. Подписанные URL, подписанные файлы cookie и географические ограничения
  4. CloudFront с WAF и Lambda@Edge
← Назад к AWS Solutions Architect