我们在S3 Bucket上有大量的文件(图片),这些文件将由cloudfront分布式提供给用户浏览器.bucket中的大部分图片改用了更好的压缩算法,但这些文件在未来30天内仍然缓存在cloudfront边缘位置。
随着时间的推移,我们又创建了一些分发,以交付bucket中现有文件的更新版本。从现在开始,我们使用Invalidation,但仍有现有的发行版仍然被搜索引擎和其他网站引用。
现在,我们希望将每个请求从旧的发行版重定向到最新的发行版。
GET http://old-distribution.amazonaws.com/user/filename.jpg
应该发送301重定向永久到
-> http:/新-distribution.amazonaws.comuserfilename.jpg
这可能吗?如果是,如何实现?
是的,这是可能的,在S3的帮助下。
在Amazon S3中创建一个空桶。 名字并不关键,只要是有效的--只能用小写字母、数字和破折号。 我们会说 example-bucket
.
在这个新的桶中,在桶属性中,静态网站托管下,选择 "将所有请求重定向到另一个域名"。 输入新的Cloudfront发行版的主机名,不含 http://
.
就在那上面,注意 Endpoint:
,这将是类似于 example-bucket.s3-website-us-east-1.amazonaws.com
.
保存您的更改,然后尝试用浏览器点击新的端点。 您输入的任何路径都应重定向到您的新分发中的相同路径。
您刚刚创建了一个源服务器,它将生成您希望 Cloudfront 返回的重定向。
实现这一功能的最后步骤是--您可能希望使用为此目的创建的不同原点进行测试。
在您的旧版本中,创建一个新的 习俗 渊源 -- -- 不 一个 "S3起源"。 使用你刚才测试的端点主机名作为起源主机名。
确保你将其配置为将所有请求以HTTP的方式发送到这个原点,并且不要把 Host
头来转发到原点,因为那是行不通的。
创建一个与路径模式相匹配的缓存行为 *
使用这个原点,并删除其他原点。
您的发行版现在会将所有请求发送到新的 "自定义原点",这实际上是由S3提供的,并将以以下方式响应。301 Moved Permanently
并将浏览器重定向到新发行版中的相同路径。
只需使用 ViewerRequest
或 OriginRequest
活动通过 Lambda@Edge
来重定向。
OriginRequest
是比较好的,因为响应被缓存了。