【问题标题】:Cloudfront Multiple origins within the same bucketCloudfront 同一存储桶中的多个来源
【发布时间】:2020-04-24 15:46:32
【问题描述】:

我有一个云端分发,我使用一个 S3 存储桶作为源。存储桶中包含私有数据和公共数据,按文件夹分隔 - public_folder_1, public_folder_2, private_folder_1, private_folder_2。我想使用 cloudfront 仅提供 2 个公用文件夹中的内容。我希望xxx.cloudfront.net/public_folder_1/file1 的请求转到public_folder_1 并请求xxx.cloudfront.net/public_folder_2/file1 转到public_folder_2

我在发行版中创建了 2 个源名称 + 路径 - mybucket/public_folder_1mybucket/public_folder_2 用于 2 个文件夹。我还使用路径模式创建了两种行为 - public_folder_1/*public_folder_2/*(我尝试在路径模式中添加前导 /,它似乎没有什么不同)。但我无法通过云端访问文件。

如果我将任一行为的路径模式更改为 * 而不是 public_folder_x/* ,那么我可以使用 xxx.cloudfront.net/filex 访问文件。我对此的担忧是,如果我在两个文件夹中都有 2 个同名的文件,cloudfront 将如何知道要使用哪个文件夹作为源?我不想为每个源路径创建和管理单独的发行版。

【问题讨论】:

  • 您找到解决方案了吗?我面临着一个非常相似的困境。
  • 不。我想唯一的出路是为每个公用文件夹创建一个单独的发行版

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


【解决方案1】:

在我的例子中,我不明白当 CloudFront 发现匹配行为时,它会将整个 URL 路径转发到 S3。如果您的 S3 存储桶子目录中未显示匹配的目录结构,您将收到 403 响应。例如,如果您在 /developer/* 上有一个行为匹配,并且 url 是 {hostname}/developer/thing.html,则代表您的源的 S3 存储桶目录必须有一个名为“developer”的根级子目录,其中包含thing.html

我对此的担忧是,如果我在两个文件夹中有 2 个同名文件,cloudfront 将如何知道要使用哪个文件夹作为源?

您必须找到某种方法通过匹配模式来区分文件。我建议向每个来源添加唯一命名的文件夹,然后根据提供的路径创建行为来转移流量:

  • origin1:mybucket/stuff
  • 原点2:mybucket/things
  • behavior1: /stuff/* --> origin1
  • behavior2: /things/* --> origin2
  • cloudfront-url/stuff/file.html --> 在 stuff 目录中返回 file.html,也就是 origin1。
  • cloudfront-url/things/file.html --> 在 things 目录中返回 file.html,也就是 origin2。

编辑:

我刚刚创建了一个具有以下两个来源的发行版...

具有以下行为...

还有下面的bucket结构……

结果如下:

我会将发行版搁置几天,以便您可以点击链接。

【讨论】:

  • 嘿尼克,这正是我的问题所在。我确实设置了两条路径(在我的根目录中),有 2 种行为 - “我在发行版中创建了 2 个来源,带有来源名称 + 路径 - mybucket/public_folder_1 和 mybucket/public_folder_2 用于 2 个文件夹。我还创建了两种行为路径模式 - public_folder_1/* 和 public_folder_2/* ”。它不起作用。 Cloudfront 最终只是缓存了一个目录
  • 我认为这并不完全正确。在该示例中,public_folder_1public_folder2origins。每个来源都相当于一个 URL hostname/。您需要在每个源中都有一个可区分的子目录,然后创建与子目录名称匹配的行为以使其正常工作。换句话说,在您的示例中,您无法匹配名称 public_folder_1public_folder2。待命,为了清楚起见,我会更新我的答案。
  • 感谢您的评论。第一段正好解决了我所有的问题。如果可以的话,我会请你喝啤酒。
  • 这很好用。非常感谢,尼克!这是一个?!
猜你喜欢
  • 2015-07-23
  • 2019-12-19
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 2015-07-10
  • 2020-03-20
相关资源
最近更新 更多