0

У меня есть CloudFront сайт промежуточной, которые получены из S3Как кэшировать до 1 минуты с S3 и CloudFront и Write-S3Object

Что я хотел бы сделать, это установить это так 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

Это дало мне следующее, который до сих пор говорит, что "Хит из CloudFront"

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== 

ответ

3

Here's a nice primer for the Cache-Control header. Вам нужно, чтобы заголовок выглядел так: *

Cache-Control: public,max-age=60 

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

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

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

Cache-Control: no-cache 

Или это:

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

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

* Существует множество вариантов. Это очень распространенный способ и будет работать.

+0

Большое спасибо за наконечник и секунды. Моя глупая ошибка. Я попробовал ваше предложение, но с помощью только-set -Metadata устанавливает: x-amz-meta-cache-control: public, max-age = 60, и это, похоже, ничего не делает. – Melina

+1

ah, right @Melina, это не заголовок * метаданных *. Вместо этого используйте '-HeaderCollection' (http://stackoverflow.com/a/28225459/659298). – tedder42

+0

Отлично работает. благодаря – Melina