同一存储桶中的Cloudfront多个起源

时间:2020-01-07 06:31:22

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

我有一个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个带有原始名称+路径的原始-2个文件夹的mybucket/public_folder_1mybucket/public_folder_2。我还创建了两种具有路径模式的行为-public_folder_1/*public_folder_2/*(我尝试在路径模式中添加前导/,似乎没有什么不同)。但是我无法通过cloudfront访问文件。

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

1 个答案:

答案 0 :(得分:0)

就我而言,我并不了解CloudFront发现匹配行为时,会将整个URL路径转发到S3 。如果您的S3存储桶子目录中未显示匹配的目录结构,则会收到403响应。例如,如果您的行为与/developer/*相匹配,并且网址为{hostname}/developer/thing.html,则表示您的来源必须的S3存储桶目录具有一个名为“开发人员”,其中包含thing.html

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

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

  • origin1:mybucket/stuff
  • origin2:mybucket/things
  • 行为1:/stuff/*-> origin1
  • 行为2:/things/*-> origin2
  • cloudfront-url/stuff/file.html->在东西目录(也称为origin1)中返回file.html
  • cloudfront-url/things/file.html->在事物目录(也称为origin2)中返回file.html

编辑:

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

origins

具有以下行为...

behaviors

还有以下存储桶结构...

S3

结果如下:

我将离开发行版几天,以便您单击链接。