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