本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
指定預設的根物件
您可以設 CloudFront 定為在使用者要求發佈的根目錄時傳回特定物件 (預設根URL物件),而不是要求散佈中的物件。指定預設根物件能讓您避免暴露分佈的內容。
如何指定預設根物件
為了避免暴露分佈的內容或傳回錯誤,請完成以下步驟為您的分佈指定預設根物件。
指定分佈的預設根物件
-
上傳預設根物件到您分佈指向的原始伺服器。
該文件可以是支持的任何類型 CloudFront。如需檔案名稱的約束清單,請參閱中
DefaultRootObject
元素的說明DistributionConfig。注意
如果預設根物件的檔案名稱太長或包含無效字元,則會 CloudFront 傳回錯誤
HTTP 400 Bad Request - InvalidDefaultRootObject
。此外, CloudFront 快取程式碼 10 秒 (依預設),並將結果寫入存取記錄。 -
確認物件的權限至 CloudFront 少授與
read
存取權。如需 Amazon S3 許可的詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的 Amazon S3 中的身分和存取管理。
-
使用CloudFront 主控台或更新您的發行版以參照預設根物件 CloudFront API。
若要使用 CloudFront 主控台指定預設根物件:
登入 AWS Management Console 並開啟 CloudFront 主控台,位於https://console.aws.amazon.com/cloudfront/v4/home
。 -
在上方窗格中的分佈清單裡,請選取分佈來更新。
-
在 Settings (設定) 窗格中的 General (一般) 標籤,選擇 Edit (編輯)。
-
在 Edit settings (編輯設定) 對話方塊的 Default root object (預設根物件) 欄位中,輸入預設根物件的檔案名稱。
只輸入物件名稱,例如,
index.html
。不要在物件名稱前新增/
。 -
選擇 Save changes (儲存變更)。
若要使用更新組態 CloudFront API,您可以為發行版中的
DefaultRootObject
元素指定一個值。如需有關使用指 CloudFront API定預設根物件的資訊,請參閱 Amazon 參 CloudFront API考UpdateDistribution中的。 -
請求根目錄,確認您已啟用預設根物件URL。如果您的瀏覽器不會顯示預設根物件,請執行以下步驟:
-
透過在 CloudFront 主控台中檢視發行版的狀態,確認您的發行版已完全部署。
-
重複步驟 2 和 3 來驗證您是否已授予正確的許可和驗證您是否正確地更新分佈的組態來指定預設根物件。
-
預設根物件的運作方式
假設以下請求指向物件 image.jpg
:
https://d111111abcdef8.cloudfront.net/image.jpg
相反地,下列要求指向相同散佈URL的根目錄,而不是指向特定物件,如第一個範例所示:
https://d111111abcdef8.cloudfront.net/
當您定義預設根物件時,呼叫分佈根的最終使用者請求會傳回預設的根物件。例如,如果您指定檔案 index.html
為預設根物件,則請求:
https://d111111abcdef8.cloudfront.net/
傳回:
https://d111111abcdef8.cloudfront.net/index.html
注意
CloudFront 不確定URL帶有多個尾隨斜線 (https://d111111abcdef8.cloudfront.net///
) 的 a 是否等於https://d111111abcdef8.cloudfront.net/
。您的原始伺服器會進行這項比較。
如果您定義預設根物件時,適用於分佈子目錄的最終使用者請求不會傳回預設的根物件。例如,假設index.html
是您的預設根物件,且會 CloudFront 接收發 CloudFront佈下install
目錄的最終使用者要求:
https://d111111abcdef8.cloudfront.net/install/
CloudFront 即使目錄中index.html
出現的複本,也不會傳回預設的根物install
件。
如果您將發行版設定為允許所有 CloudFront 支援的HTTP方法,則預設根物件會套用至所有方法。例如,如果您的預設根物件是 index.php,而您撰寫應用程式以提交POST
要求至網域 (https://example.com) 的根目錄,則會將要求 CloudFront 傳送至 https://example.com /index.php。
CloudFront 預設根物件的行為與 Amazon S3 索引文件的行為不同。當您配置 Amazon S3 儲存貯體做為網站,並指定索引文件時,Amazon S3 傳回索引文件,即使使用者在儲存貯體中請求子目錄。(索引文件的副本必須出現在每個子目錄)。有關將 Amazon S3 儲存貯體設定為網站以及索引文件的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的 AmazonS3 上的託管網站一章。
重要
請記住,預設根物件僅適用於您的 CloudFront 發佈。您仍然需要為原始伺服器管理安全性。例如,如果您使用的是 Amazon S3 來源,您仍然需要ACLs適當地設定 Amazon S3 儲存貯體,以確保儲存貯體的存取層級。
如果您沒有定義根對象,該如何 CloudFront 工作
如果您不定義預設根物件,則分佈根的請求會通過您的原始伺服器。如果您使用 Amazon S3,有可能傳回以下任何情況:
-
Amazon S3 儲存貯體的內容清單 — 在下列任何一種情況下,使用存取分發的任何人都可以看 CloudFront 到您的來源內容:
-
您的儲存貯體未設定正確。
-
儲存貯體上的 Amazon S3 許可與您的分佈相關連,且在儲存貯體中物件上把存取權限給予每個人。
-
終端使用者使用您的原始根目錄存取您的來源URL。
-
-
來源的私有內容清單 — 如果您將來源設定為私有分發 (只有您並 CloudFront 有權存取),任何擁有登入資料可透過存取分發的人,都可以看到與您分發相關聯的 Amazon S3 儲存貯體的內容 CloudFront。在此情況下,使用者無法透過您的原始根目錄存取您的內容URL。如需有關分佈私有內容的詳細資訊,請參閱使用已簽署URLs和簽署的 Cookie 提供私人內容。
-
Error 403 Forbidden
— 如果與您的分發相關聯的 Amazon S3 儲存貯體上的許可或該儲存貯體中物件的許可拒絕對所有人的存取,則會CloudFront 傳回 CloudFront 此錯誤。