我有一个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_1
和mybucket/public_folder_2
。我还创建了两种具有路径模式的行为-public_folder_1/*
和public_folder_2/*
(我尝试在路径模式中添加前导/
,似乎没有什么不同)。但是我无法通过cloudfront访问文件。
如果我将两种行为的路径模式都更改为*
而不是public_folder_x/*
,那么我可以使用xxx.cloudfront.net/filex
访问文件。我对此的担心是,如果两个文件夹中都有2个同名文件,cloudfront将如何知道将哪个文件夹用作源?我不想为每个原始路径创建和管理单独的发行版。
答案 0 :(得分:0)
就我而言,我并不了解CloudFront发现匹配行为时,会将整个URL路径转发到S3 。如果您的S3存储桶子目录中未显示匹配的目录结构,则会收到403响应。例如,如果您的行为与/developer/*
相匹配,并且网址为{hostname}/developer/thing.html
,则表示您的来源必须的S3存储桶目录具有一个名为“开发人员”,其中包含thing.html
。
对此我的担心是,如果我在两个文件夹中都有两个同名文件,cloudfront将如何知道将哪个文件夹用作源?
您必须找到某种方式来通过匹配模式来区分文件。我建议向每个来源添加唯一命名的文件夹,然后创建行为以根据提供的路径转移流量:
mybucket/stuff
mybucket/things
/stuff/*
-> origin1 /things/*
-> origin2 cloudfront-url/stuff/file.html
->在东西目录(也称为origin1)中返回file.html
。cloudfront-url/things/file.html
->在事物目录(也称为origin2)中返回file.html
。我刚刚创建了一个具有以下两个来源的发行版...
具有以下行为...
还有以下存储桶结构...
结果如下:
file.html
返回S3-stackoverflow-test-bucket/public_folder_1
。file.html
返回S3-stackoverflow-test-bucket/public_folder_1/pub1
file.html
返回S3-stackoverflow-test-bucket/public_folder_2/pub2
S3-stackoverflow-test-bucket/public_folder_2/file.html
。我将离开发行版几天,以便您单击链接。