【问题标题】:CloudFront multi origin and cache behaviour issueCloudFront 多源和缓存行为问题
【发布时间】:2018-01-06 14:21:07
【问题描述】:

我已将 2 个 S3 存储桶定义为 CF 中的来源。

Origin 1 : mybucket1.amazonaws.com
Origin 2 : mybucket2.amazonaws.com/images

我只想在 mybucket2 中分发 images 文件夹。

我创建了一个缓存行为,路径模式/images 指向Origin2

我尝试使用 url 访问图像 https://lksngfd4w24.cloudfront.net/images/image1.jpg

似乎 CF 正在将缓存行为路径模式附加到 s3 路径。上面的 url 会引发如下错误。

<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Key>
images/images/image1.jpg
</Key>
<RequestId>sdanfladnfaf</RequestId>
<HostId>
   medlakfmkamfldaf
</HostId>
</Error>

有没有办法阻止 CF 将路径前缀附加到 S3 URL?或者有没有其他方法可以使用单个分布但具有多个来源来实现这种要求。

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-cloudfront


    【解决方案1】:

    根据您的要求,添加带有基本路径的两个来源并配置行为,以便

    • /* 的默认行为是 Origin 1
    • 行为 /images/* 覆盖到 起源 2

    注意:在您的 Origin 2 中,它需要有 images 文件夹才能工作,这是 CloudFront 到 S3 源的行为映射的限制。

    如果您需要进一步的扩展,您可以使用 Edge Lambda,将请求 URL 更改为不同的原始路径。

    【讨论】:

    • 这是实现它的一种方式。我担心的是 CF 会继续尝试分发 bucket2 的全部内容,我已经实施了一个存储桶策略以允许 CF 仅访问图像文件夹以避免它。希望亚马逊能够以更大的灵活性改进 CF-S3 集成。我会跳过 Lambda 以节省设计的简单性和供应商锁定。解决方案不是最佳的,但可以工作。非常感谢和感激。
    猜你喜欢
    • 2016-05-06
    • 2019-06-14
    • 2020-12-29
    • 2021-07-22
    • 1970-01-01
    • 2020-11-22
    • 2019-08-03
    • 2018-05-03
    • 2016-02-18
    相关资源
    最近更新 更多