Как я могу кэшировать до 1 минуты с помощью S3 и CloudFront и Write-S3Object

У меня есть промежуточный сайт CloudFront, полученный из S3.

Что я хотел бы сделать, так это настроить это так, чтобы Cloudfront кэшировал только одну минуту, а затем любой запрос после этого возвращался к S3 для получения новых данных. Если возможно, я также хотел бы знать, как полностью отключить кэширование.

Я пробовал это:

Write-S3Object -BucketName "xx-staging" 
               -Key "index.html" 
               -Metadata @{"Cache-Control" = "60000"}
               -File "index.html" 

Результат таков:

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 24686
Connection: keep-alive
Date: Mon, 18 May 2015 14:14:21 GMT
x-amz-meta-cache-control: 60000
Last-Modified: Mon, 18 May 2015 13:45:46 GMT
ETag: "b2d38663e20237e056f8e507a2caa77a"
Accept-Ranges: bytes
Server: AmazonS3
Age: 1648
X-Cache: Hit from cloudfront
Via: 1.1 6d4df30b39d1e7ecggb0ecd7b8940b88.cloudfront.net (CloudFront)
X-Amz-Cf-Id: oNHGs5CK8hed2OJ_BPaeaf1zFzQE4w7tmnkOym5_1QAMvU6YjNwcfw==

Когда я пробую другой запрос через пять минут, я получаю аналогичный ответ с

X-Cache: Hit from cloudfront

Может ли кто-нибудь указать на то, что я делаю неправильно.

Обратите внимание, я ищу ответ, который использует Write-S3Object.

Обратите внимание, что я попытался добавить на портал:

Максимальный возраст CacheControl: 60000

Это дало мне следующее, в котором до сих пор написано «Хит из облачного фронта».

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 24686
Connection: keep-alive
Date: Mon, 18 May 2015 15:34:11 GMT
x-amz-meta-cache-control: 60000
Cache-Control: 60000
Last-Modified: Mon, 18 May 2015 15:26:29 GMT
ETag: "b2d38663e20237e056f8e507a2caa77a"
Accept-Ranges: bytes
Server: AmazonS3
Age: 82
X-Cache: Hit from cloudfront
Via: 1.1 cf25d52fc78aeceb914fb4445fd00a15.cloudfront.net (CloudFront)
X-Amz-Cf-Id: JHXjHLaUUzN4L0M7rqkrr97c2glFlNT_avHASTxDuQw6ePeK4mQppg==

person Community    schedule 18.05.2015    source источник


Ответы (1)


Вот хороший пример для заголовка Cache-Control . Вам нужно, чтобы заголовок выглядел так*:

Cache-Control: public,max-age=60

Заголовок управления кешем использует секунды, а не миллисекунды. «общедоступный» просто означает «хорошо хранить это на CDN». Я считаю, что это будет работать в вашей начальной команде Powershell:

 -HeaderCollection @{"Cache-Control" = "public,max-age=60"}

Если вы хотите полностью отключить кеширование, установите его следующим образом*:

Cache-Control: no-cache

Или это:

Cache-Control: max-age=60,must-revalidate

Я бы предложил использовать curl -D - http://s3-website-url, чтобы проверить, правильно ли вы поняли. Таким образом, вы можете забыть о Cloudfront для проверки заголовков.

* есть много вариаций. Это очень распространенный способ, и он будет работать.

person tedder42    schedule 18.05.2015
comment
Большое спасибо за подсказку и секунды. Моя глупая ошибка. Я пробовал ваше предложение, но с помощью -Metadata просто устанавливает: x-amz-meta-cache-control: public,max-age=60, и это, похоже, ничего не делает. - person ; 18.05.2015
comment
ах, правильно @Melina, это не заголовок метаданные. Используйте вместо этого -HeaderCollection. - person tedder42; 18.05.2015