繁体   English   中英

Cloudfront 同一存储桶中的多个源

[英]Cloudfront Multiple origins within the same bucket

我有一个 Cloudfront 发行版,我使用一个 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/* (我尝试在路径模式中添加前导/ ,它似乎没有什么区别)。 但是我无法通过 cloudfront 访问文件。

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

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

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

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

  • origin1: mybucket/stuff
  • origin2: mybucket/things
  • 行为 1: /stuff/* --> origin1
  • 行为 2: /things/* --> origin2
  • cloudfront-url/stuff/file.html --> 返回 stuff 目录中的file.html ,又名 origin1。
  • cloudfront-url/things/file.html --> 返回things目录中的file.html ,也就是origin2。

编辑:

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

起源

有以下行为...

行为

而下面的桶结构...

S3

结果如下:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM