Как правильно настроить кэширование Amazon CloudFront

Я использую S3 для хранения набора изображений и CloudFront для их кэширования. Проблема, с которой я сталкиваюсь, заключается в том, что мои изображения неправильно кэшируются.

Если я проверю заголовки изображения по ссылке CloudFront, при первой попытке будет показано ПРОМАХ, а при всех последующих попытках — ПОПАДАНИЕ. Это нормально, но если я закрою браузер, уйду на несколько часов и повторю попытку, он покажет MISS. Следовательно, это указывает на то, что он кэшируется только на короткий период.

Вот пример изображения на КДС: http://d711ds9nsj32q.cloudfront.net/static/8e1f8567e229e24e0782ed_1e994b9dc56ba092ecd2_5.jpg

Странное поведение заключается в том, что если вы попытаетесь перехватить заголовки с помощью web-sniffer.net, вы увидите MISS каждый раз. Несмотря на то, что элемент управления кешем public, max-age=315360000 и срок его действия истекает через 10 лет.

Как правильно кэшировать что-то на 10 лет в облаке? Есть ли какие-то дополнительные заголовки, которые мне не хватает?

Правка: для сравнения то же изображение на imgur. Они используют cloudflare, но поведение, которое я вижу, правильное. Как только он кэшируется, я больше никогда не вижу промаха ни с одного из моих компьютеров или из близлежащих мест. И мои заголовки, и их заголовки похожи, за исключением нескольких (неважных) отличий. Любая помощь приветствуется.


person steve    schedule 29.01.2014    source источник


Ответы (1)


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

Скорее всего, через какое-то время облачный фронт просто вытесняет ваши предметы:

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

– из этой статьи

Что касается web-sniffer.net, вы заметите, что он отправляет заголовок Cache-Control: no-cache, который заставит облачный доступ извлекаться из источника.

person Alex Guerra    schedule 30.01.2014
comment
Спасибо за помощь. Я не думаю, что выселение происходит, потому что я тестирую относительно новые файлы. Казалось бы, CF нужно подождать еще какое-то время (месяцы?), прежде чем он сделает что-то подобное. Также: если вы попробуете это изображение из Squre на веб-сниффере вы увидите, что это ХИТ каждый раз. Похоже, мои заголовки и их похожи, и оба в CloudFront. - person steve; 30.01.2014
comment
Вы правы, я пробую это на своих собственных файлах, обслуживаемых через cf, и это регистрирует попадание. Не могли бы вы опубликовать URL-адрес исходного объекта? - person Alex Guerra; 30.01.2014
comment
Алекс, вот исходный URL. Я могу дать вам больше информации, если вам нужно. Когда я загружаю файлы, я устанавливаю «Cache-Control» и «Expires» на 10 лет. Спасибо. - person steve; 30.01.2014
comment
Я установил перед вами другой дистрибутив по умолчанию и сумел заставить web-sniffer.net каждый раз показывать попадания в кеш (после пары промахов). Это заставляет меня подозревать, что все происходящее происходит из-за настроек вашего дистрибутива. У вас есть что-то не по умолчанию в вашей конфигурации? - person Alex Guerra; 31.01.2014
comment
Очень интересно. Я не делаю ничего, кроме стандартного. Я могу пойти дальше и установить еще один. Оставлю все по умолчанию и выложу здесь. - person steve; 31.01.2014
comment
Итак, я создал новый дистрибутив , и он по-прежнему отсутствует на web-sniffer.net. . Интересно, в чем может быть проблема? - person steve; 31.01.2014
comment
Тьфу, я повторно включил этот дистрибутив, и теперь я также не могу заставить веб-сниффер снова показывать попадания в кеш! Извините, я не мог больше помочь, это поставило меня в тупик. - person Alex Guerra; 31.01.2014
comment
Нет проблем, я купил план поддержки, поэтому я попытаюсь решить эту проблему с ними сейчас. Спасибо большое. Я приму ваш ответ. - person steve; 31.01.2014