【问题标题】:Cloudfront: redirect a whole distribution to a newer oneCloudfront:将整个发行版重定向到较新的发行版
【发布时间】:2016-01-09 19:48:34
【问题描述】:

我们在 S3 存储桶上有大量文件(图像),这些文件将通过云端分发提供给用户浏览器。 存储桶中的大多数图像已更改为更好的压缩算法,但这些文件仍会在未来 30 天内缓存在云端边缘位置。

随着时间的推移,我们创建了更多的发行版来交付存储桶中现有文件的更新版本。从现在开始,我们使用 Invalidation,但仍有一些现有的发行版仍在搜索引擎和其他网站中被引用。

现在我们希望将每个请求从旧发行版重定向到最新发行版:

GET http://old-distribution.amazonaws.com/user/filename.jpg

应该将 301 重定向永久发送到

-> http://-distribution.amazonaws.com/user/filename.jpg

这可能吗?如果是,如何实现?

【问题讨论】:

    标签: redirect amazon-s3 amazon-cloudfront


    【解决方案1】:

    是的,在 S3 的帮助下,这是可能的。

    在 Amazon S3 中创建一个空存储桶。只要有效,名称就不是关键的——仅小写字母、数字和破折号。我们会说example-bucket

    在这个新的存储桶中,在存储桶属性的静态网站托管下,选择“将所有请求重定向到另一个域”。输入新 Cloudfront 发行版的主机名,不带 http://

    在上面,注意Endpoint:,它类似于example-bucket.s3-website-us-east-1.amazonaws.com

    保存您的更改,然后尝试使用浏览器访问新端点。您输入的任何路径都应重定向到新发行版中的相同路径。

    您刚刚创建了一个源服务器,它将生成您希望 Cloudfront 返回的重定向。

    实现此功能的最后步骤(您可能希望使用为此目的创建的不同来源进行测试)如下:

    在您的旧发行版中,创建一个新的 custom 源 -- 不是“S3 源”。使用您刚刚测试的端点主机名作为源主机名。

    确保将其配置为将所有请求作为 HTTP 发送到此源,并且不要将 Host 标头列入白名单以转发到源,因为这不起作用。

    创建一个缓存行为匹配路径模式*,使用这个源,并删除其他的。

    您的分发版现在会将所有请求发送到您的新“自定义源”,这实际上是由 S3 提供的,并将以 301 Moved Permanently 响应并将浏览器重定向到新分发版中的相同路径。

    【讨论】:

    • 如何创建“自定义来源”?对我来说,似乎只能创建一个“s3 origin”。
    • 很抱歉给您带来了困惑。输入源域名时,不要从列表中选择存储桶,而是手动键入您从 S3 控制台获悉的终端节点主机名。
    • 非常感谢您的澄清。最后一课是更改默认缓存行为。无法删除默认条目,我找不到任何选项将新创建的缓存行为标记为“默认”。在路径模式中设置星号显然是不够的
    【解决方案2】:

    只需通过Lambda@Edge 使用ViewerRequestOriginRequest 事件即可重定向。

    OriginRequest 更好,因为响应被缓存了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-03
      • 2015-08-13
      • 2020-12-30
      • 2023-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多