如何使用S3和CloudFront以及Write-S3Object

时间:2015-05-18 14:59:24

标签: amazon-web-services amazon-s3 amazon-cloudfront cache-control aws-powershell

我有一个来自S3的暂存CloudFront站点

我想要做的是设置它以使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 max-age: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==

1 个答案:

答案 0 :(得分:2)

Here's a nice primer for the Cache-Control header。您需要标题看起来像这样*:

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来验证标题。

*有很多变化。这是非常常见的方式,并且会起作用。