【问题标题】:Hosting multiple S3 origins under one CloudFront distribution在一个 CloudFront 分配下托管多个 S3 源
【发布时间】:2018-09-12 22:26:33
【问题描述】:

是否可以在同一个 CloudFront 分配下托管多个 S3 源?假设我有存储桶 A 和存储桶 B,它们都托管静态网站 - 我可以将它们都添加为分布的来源,并指定一个路径,例如/alternate 是桶 B 的来源,所以访问 http://<distribution>/ 会将您带到桶 A 托管的网站,访问 http://<distribution>/alternate 会将您带到桶 B 托管的网站?从我目前所读的内容来看,似乎有多个来源,不一定是多个 S3 来源。

【问题讨论】:

  • 您希望 1 个 Distribution 连接到 2 个不同的 S3 存储桶?那是不可能的。它始终是 1:1 的关系。为什么不想创建 2 个 Distributions 并设置相同的 cname?
  • @MarcJohnson 不正确。根据默认限制,您最多可以将 25 个来源(S3 或非 S3)连接到单个分发。
  • @danielle 是的,您可以...在“起源”选项卡中声明其他起源后,路径行为将路径模式(例如/alternate*)映射到特定起源...但问题是默认情况下,浏览器发送的整个路径就是发送到bucket的路径(包括前导/alternate)。
  • @Michael-sqlbot 真的!对不起,我的错。您可以在此处找到有关限制的信息:docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…
  • 源路径为空意味着对/alternate/thing 的请求以/alternate/thing 的形式到达源。原点路径/some 表示对/alternate/thing 的请求以/some/alternate/thing 的形式到达原点。除非您使用 Lambda@Edge 修改请求,否则无法从请求路径中删除任何内容......所以,是的。路径模式不会改变原点实际看到的内容。

标签: amazon-s3 amazon-cloudfront


【解决方案1】:

您可以将多个 S3 源添加到 CloudFront 分配

但是,行为被锁定到特定的来源。行为控制路径。所以,如果 /static 被 Origin A/S3 A 使用,你不能让 /static 转到 /Origin B/S3 B

有人建议使用具有相同 CNAME 的多个 CloudFront。那也不行。 CloudFront 不允许在多个分配中使用相同的 CNAME。

从学术上讲,这可以通过 LambdaEdge 或其他一些检查 S3 A 的外部进程来实现,如果它不可用(比如 - 在推送新代码时正在维护),它可以去更新 /static 的 CF 行为到 Origin B/S3 B.

我希望 AWS 为这个用例提出一个更优雅的解决方案。就像在多个发行版中允许相同的 CNAME,或者提供某种与 S3 存储桶的 R53 集成(从未尝试将两个不同的 S3 存储桶放在 R53 后面 .. 可能不起作用,因为主机标头会改变)

【讨论】:

    【解决方案2】:

    您可以附加一个 Lambda 函数作为触发器来拦截 CloudFront 的路由。实现非常参与;但会允许您的特定用例。

    示例实现https://aws.amazon.com/blogs/networking-and-content-delivery/dynamically-route-viewer-requests-to-any-origin-using-lambdaedge/

    Lambda@Edgehttps://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html

    【讨论】:

    • 欢迎来到 Stack Overflow!虽然链接是分享知识的好方法,但如果它们在未来被破坏,它们将无法真正回答问题。将回答问题的链接的基本内容添加到您的答案中。如果内容太复杂或太大而无法在此处放置,请描述所提出解决方案的总体思路。请记住始终保留指向原始解决方案网站的链接引用。见:How do I write a good answer?
    猜你喜欢
    • 2020-10-12
    • 2015-07-23
    • 1970-01-01
    • 2016-10-31
    • 2021-10-07
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    相关资源
    最近更新 更多