我最近开始在cloudfront CDN上提供我的网站图片而不是S3认为它会更快。它不是。实际上它要慢得多。经过大量调查后,我暗示在图像对象上设置到期日是关键,因为Cloudfront将知道保留缓存静态内容的时间。说得通。但AWS的记录很少,我无法弄清楚如何更改到期日期。人们说“你可以在aws控制台上改变这个”请说明我是多么愚蠢,因为我看不到这一点。已经好几个小时了。毋庸置疑,我对此感到非常沮丧。无论如何,任何小到可能的提示都会非常棒。我喜欢AWS,以及Cloudfront所承诺的,但到目前为止它并不像它看起来那样。
编辑附加细节: 每个答案添加了到期日期标题。在我的情况下,我没有标题。我的假设是,我的服务映像的Cloudfront性能缓慢与标头中没有过期有关。设置了屏幕截图中显示的到期日期,并在答案中进行了描述,我发现性能没有明显差异(从无标题到仅添加到期日期)。我的网站平均需要7秒才能加载10个核心图像(每个<60Kbs)。这10张图片(通过云端服务)占加载时间延迟的60-80% - 取决于所使用的性能工具。由于在我的VPS上提供文件的速度更快,显然有些问题。我讨厌认为cloudfront是问题,因为有很多人使用它,我不想从EC2和S3中断,但是现在测试MAxCDN显示出更好的结果。我将在接下来的24小时内继续测试,但我的结论是,到期日期标题只是一个令人困惑的细节,没有任何有利的影响。希望我错了,因为我想将它保留在AWS系列中。也许我在失效日期咆哮着错误的树?
答案 0 :(得分:1)
您需要在将文件上传到S3时将其设置在元数据中。 This article描述了如何实现这一目标。
到期日期的格式是RFC1123日期,其格式如下:
Expires: Thu, 01 Dec 1994 16:00:00 GMT
将此设置为远期日期将使CloudFront等缓存能够长时间保存文件,并且在这种情况下加速交付,因为单个边缘位置(全世界为CloudFront提供内容的服务器)已经具有数据,不需要一次又一次地获取它。
即使有一个远期未来的到期头,对象的第一个请求也会很慢,因为边缘位置必须先获取对象一次才能从缓存中提供它。
或者您可以省略Expires
标题并改用Cache-Control
。 CloudFront也将理解这一点,并且您在到期时更灵活。在这种情况下,您可以举例说明对象应该从第一个请求边缘位置到对象的一天保持一天:
Cache-Control: public, max-age=86400
在这种情况下,时间是使用秒而不是固定日期。
答案 1 :(得分:0)
虽然设置Cache-Control或Expires标头会提高对象的缓存能力,但它不会提高您的60k / sec下载速度。这需要AWS的一些帮助。因此,我建议使用一些示例响应标头,traceroutes和解析器信息发布到AWS CloudFront Forums。