如何使用 S3 和 CloudFront 以及 Write-S3Object 缓存到 1 分钟
How can I cache to 1 minute with S3 and CloudFront and Write-S3Object
我有一个来自 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 最大年龄:60000
这给了我以下仍然说 "Hit from 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==
Here's a nice primer for the Cache-Control header。您需要 header 看起来像这样 *:
Cache-Control: public,max-age=60
cache-control header 使用秒,而不是毫秒。 'public' 基本上就是 "it's okay to store this on a 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 来验证 headers.
*
有很多变化。这是很常见的方法,并且会起作用。
我有一个来自 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 最大年龄:60000
这给了我以下仍然说 "Hit from 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==
Here's a nice primer for the Cache-Control header。您需要 header 看起来像这样 *:
Cache-Control: public,max-age=60
cache-control header 使用秒,而不是毫秒。 'public' 基本上就是 "it's okay to store this on a 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 来验证 headers.
*
有很多变化。这是很常见的方法,并且会起作用。