[英]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_1
和mybucket/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 如何知道要使用哪個文件夾作為源?
您必須找到某種方法通過匹配模式來區分文件。 我建議為每個源添加唯一命名的文件夾,然后根據提供的路徑創建行為以轉移流量:
mybucket/stuff
mybucket/things
/stuff/*
--> origin1/things/*
--> origin2cloudfront-url/stuff/file.html
--> 返回 stuff 目錄中的file.html
,又名 origin1。cloudfront-url/things/file.html
--> 返回things目錄中的file.html
,也就是origin2。我剛剛創建了一個具有以下兩個來源的發行版......
有以下行為...
而下面的桶結構...
結果如下:
file.html
從S3-stackoverflow-test-bucket/public_folder_1
。S3-stackoverflow-test-bucket/public_folder_1/pub1
返回file.html
file.html
從S3-stackoverflow-test-bucket/public_folder_2/pub2
S3-stackoverflow-test-bucket/public_folder_2/file.html
。我會將發行版擱置幾天,以便您可以單擊鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.