本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
搭配 CloudFront 分佈使用各種原始伺服器
建立分佈後,您必須指定 CloudFront 為檔案傳送請求的原始伺服器。CloudFront 可以與多種不同類型的原始伺服器搭配使用,例如,您可以使用 Amazon S3 儲存貯體、MediaStore 容器、MediaPackage 頻道、Application Load Balancer 或 AWS Lambda 函數 URL。
如果您在私有子網路中有 Application Load Balancer、Network Load Balancer 或 EC2 執行個體,則可以將其用作 VPC 原始伺服器。使用 VPC 原始伺服器時,您的應用程式只能在具有 CloudFront 分佈的私有子網路中存取,以防止您的應用程式在公有網際網路上存取。如需詳細資訊,請參閱使用 VPC 原始伺服器限制存取。
注意
您可以使用邊緣函數,為每個請求動態選取適當的原始伺服器。透過使用 CloudFront Functions 或 Lambda@Edge,您可以根據檢視器的地理位置、請求標頭或查詢字串參數等因素,將請求路由到不同的原始伺服器。如需詳細資訊,請參閱使用 函數在邊緣自訂。
主題
使用 Amazon S3 儲存貯體
下列主題介紹了多種方法,可協助您將 Amazon S3 儲存貯體用做 CloudFront 分佈的原始伺服器。
主題
使用標準 Amazon S3 儲存貯體
使用 Amazon S3 做為分佈的原始伺服器時,可以將想讓 CloudFront 傳送的物件放置在 Amazon S3 儲存貯體中。您可以使用 Amazon S3 支援的任何方法將物件放入 Amazon S3,例如 Amazon S3 主控台或 API,也可使用第三方工具。如同使用其他標準 Amazon S3 儲存貯體一樣,您可以在儲存貯體中建立階層結構以存放物件。
使用現有 Amazon S3 儲存貯體做為您的 CloudFront 原始伺服器,不會以任何方式變更儲存貯體;您可以繼續像平常一樣按標準 Amazon S3 價格使用它來存放和存取 Amazon S3 物件。您需要定期支付 Amazon S3 費用才能將物件存放在儲存貯體中。如需 CloudFront 服務使用費的詳細資訊,請參閱 Amazon CloudFront 定價
重要
為了讓您的儲存貯體使用 CloudFront,該名稱必須符合 DNS 命名請求。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的儲存貯體命名規則。
將 Amazon S3 儲存貯體指定為 CloudFront 的原始伺服器時,建議使用以下格式:
bucket-name
.s3.region
.amazonaws.com
當您以此格式指定儲存貯體名稱,可以使用以下 CloudFront 功能:
-
將 CloudFront 設定為使用 SSL/TLS 與 Amazon S3 儲存貯體進行通訊。如需詳細資訊,請參閱搭配 CloudFront 使用 HTTPS。
-
使用原始存取控制來請求檢視器使用 CloudFront URL 存取您的內容,而不是使用 Amazon S3 URL。如需詳細資訊,請參閱限制對 Amazon S3 原始伺服器的存取。
-
透過向 CloudFront 提交
POST
和PUT
請求,更新您的儲存貯體的內容。如需詳細資訊,請參閱 CloudFront 如何處理和轉送請求至您的 Amazon S3 原始伺服器 主題中的 HTTP 方法。
請勿使用以下格式指定儲存貯體:
-
Amazon S3 路徑樣式:
s3.amazonaws.com/
bucket-name
-
Amazon S3 CNAME
使用 Amazon S3 Object Lambda
在您建立 Object Lambda 存取點時,Amazon S3 會自動為您的 Object Lambda 存取點產生唯一的別名。您可以使用此別名,而非 Amazon S3 儲存貯體名稱作為 CloudFront 發佈的原始伺服器。
在您將 Object Lambda 存取點別名用作 CloudFront 的原始伺服器時,建議使用以下格式:
alias
.s3.region
.amazonaws.com
如需有關尋找
的詳細資訊,請參閱《Amazon S3 使用者指南》中的如何為您的 S3 儲存貯體 Object Lambda 存取點使用儲存貯體式別名。alias
重要
在您使用 Object Lambda 存取點做為 CloudFront 的原始伺服器時,您必須使用原始伺服器存取控制。
如需範例使用案例,請參閱將 Amazon S3 Object Lambda 與 Amazon CloudFront 搭配使用,以為最終使用者量身打造內容
CloudFront 會將 Object Lambda 存取點原始伺服器視為與標準 Amazon S3 儲存貯體原始伺服器相同。
如果您使用 Amazon S3 Object Lambda 作為分發的原始伺服器,則必須設定以下四個許可。
使用 Amazon S3 存取點
當您使用 S3 存取點時,Amazon S3 會自動為您產生唯一的別名。您可以使用此別名,而非 Amazon S3 儲存貯體名稱作為 CloudFront 發佈的原始伺服器。
當您使用 Amazon S3 存取點別名做為 CloudFront 的原始伺服器時,建議您使用下列格式:
alias
.s3.region
.amazonaws.com
如需尋找 的詳細資訊
,請參閱《Amazon S3 使用者指南》中的為 S3 儲存貯體存取點使用儲存貯體樣式別名。 Amazon S3 alias
重要
當您使用 Amazon S3 存取點做為 CloudFront 的原始伺服器時,您必須使用原始存取控制。
CloudFront 會將 Amazon S3 存取點原始伺服器視為與標準 Amazon S3 儲存貯體原始伺服器相同。
如果您使用 Amazon S3 Object Lambda 作為分發的原始伺服器,則必須設定以下兩個許可。
使用設定為網站端點的 Amazon S3 儲存貯體
您可以將設定為網站端點的 Amazon S3 儲存貯體當做自訂原始伺服器,與 CloudFront 搭配使用。當您配置 CloudFront 分佈時,在原始伺服器中為您的儲存貯體輸入 Amazon S3 靜態網站託管端點。這個值會顯示在 Amazon S3 主控台
http://
bucket-name
.s3-website-region
.amazonaws.com
如需指定 Amazon S3 靜態網站端點的詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的網站端點。
當您以此格式指定儲存貯體名稱做為您的原始伺服器時,可以使用 Amazon S3 重新引導和 Amazon S3 自訂錯誤文件。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的設定自訂錯誤文件和設定重新引導部分。(CloudFront 還提供自訂錯誤頁面。如需詳細資訊,請參閱針對特定 HTTP 狀態碼建立自訂錯誤頁面。)
使用 Amazon S3 儲存貯體做為 CloudFront 的原始伺服器,不會導致儲存貯體出現任何變動。您可以如一般情況般繼續使用,且需支付一般 Amazon S3 費用。如需 CloudFront 服務使用費的詳細資訊,請參閱 Amazon CloudFront 定價
注意
如果您使用 CloudFront API 來透過已設為網站端點的 Amazon S3 儲存貯體建立分發,您必須使用 CustomOriginConfig
來配置,雖然網站託管於 Amazon S3 儲存貯體。如需使用 CloudFront API 建立分佈的詳細資訊,請參閱 Amazon CloudFront API 參考中的 CreateDistribution。
將 CloudFront 新增至現有的 Amazon S3 儲存貯體
如果您將物件存放於 Amazon S3 儲存貯體,您可以讓使用者直接從 S3 取得您的物件,或配置 CloudFront 從 S3 取得物件,然後將它們分配給使用者。如果您的使用者經常存取您的物件,則使用 CloudFront 更具成本效益,因為在較高用量,CloudFront 資料傳輸的價格低於 Amazon S3 資料傳輸的價格。此外,使用 CloudFront 下載的速度比單獨使用 Amazon S3 要快,因為物件存放在較靠近使用者的位置。
注意
如果您希望 CloudFront 尊重 Amazon S3 跨原始伺服器資源共享配置,請配置 CloudFront 將 Origin
標頭轉送到 Amazon S3。如需詳細資訊,請參閱根據請求標頭快取內容。
如果您目前使用自己的網域名稱 (例如 example.com) 直接從 Amazon S3 儲存貯體分發內容,而不是 Amazon S3 儲存貯體的網域名稱 (例如 amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com),您可以使用下列程序新增 CloudFront,而不會中斷。
在您已經從 Amazon S3 分佈內容時新增 CloudFront
-
建立 CloudFront 分佈。如需詳細資訊,請參閱建立分發。
當您建立分佈時,請指定 Amazon S3 儲存貯體的名稱做為原始伺服器。
重要
為了讓您的儲存貯體使用 CloudFront,該名稱必須符合 DNS 命名請求。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的儲存貯體命名規則。
如果您將 Amazon S3 與 CNAME 搭配使用,也請為您的分佈指定 CNAME。
-
建立一個在 Amazon S3 儲存貯體中包含公開可讀取物件的連結之測試 Web 頁面,並測試該連結。針對此初始測試,請使用物件 URL 中分佈的 CloudFront 網域名稱,例如
https://d111111abcdef8.cloudfront.net/images/image.jpg
。如需 CloudFront URL 格式的詳細資訊,請參閱 自訂 CloudFront 中檔案的 URL 格式。
-
如果您使用的是 Amazon S3 CNAMEs您的應用程式會使用網域名稱 (例如 example.com) 來參考 Amazon S3 儲存貯體中的物件,而不是使用儲存貯體的名稱 (例如 amzn-s3-demo-bucket.s3.amazonaws.com)。若要繼續使用您的網域名稱來參考物件,而不是使用分佈的 CloudFront 網域名稱 (例如 d111111abcdef8.cloudfront.net),您需要透過 DNS 服務供應商來更新設定。
針對使用 Amazon S3 CNAME,您的 DNS 服務供應商必須有網域的 CNAME 資源紀錄集,該記錄目前將網域查詢路由到您的 Amazon S3 儲存貯體。例如,如果使用者請求該物件:
https://example.com/images/image.jpg
該請求會自動重新路由,且使用者看到此物件:
https://
amzn-s3-demo-bucket
.s3.amazonaws.com/images/image.jpg若要路由查詢到 CloudFront 分佈,而非 Amazon S3 儲存貯體,您需要使用 DNS 服務供應商提供的方法來更新網域的 CNAME 資源紀錄集。這項經過更新的 CNAME 記錄會將 DNS 查詢從您的網域重新引導到您的分佈的 CloudFront 網域名稱。如需詳細資訊,請參閱 DNS 服務供應商提供的說明文件。
注意
如果您使用 Route 53 做為 DNS 服務,您可以使用 CNAME 資源紀錄集或別名資源紀錄集。如需編輯資源紀錄集的詳細資訊,請參閱編輯記錄。如需別名資源紀錄集的詳細資訊,請參閱選擇別名或非別名記錄。這兩個主題都在 Amazon Route 53 開發人員指南中。
如需搭配 CloudFront 使用 CNAME 的詳細資訊,請參閱 透過新增備用網域名稱 (CNAMEs來使用自訂 URLs 。
在您更新 CNAME 資源紀錄集後,傳播變更到整個 DNS 系統需要 72 小時,但通常更快。這段期間內,會持續將一些內容的請求路由到 Amazon S3 儲存貯體,並將其他的內容路由到 CloudFront。
將 Amazon S3 儲存貯體移至不同的 AWS 區域
如果您使用 Amazon S3 做為 CloudFront 分佈的原始伺服器,並將儲存貯體移至不同的 AWS 區域,則當下列兩者都成立時,CloudFront 最多可能需要一小時的時間來更新其記錄以使用新區域:
-
您使用 CloudFront 原始存取身分 (OAI) 限制對儲存貯體的存取。
-
您將儲存貯體移至需要簽章版本 4 進行身分驗證的 Amazon S3 區域。
當您使用 OAI 時,CloudFront 使用區域 (其他值中),以計算用來從儲存貯體請求物件的簽章。如需 OAI 的詳細資訊,請參閱使用原始存取身分 (舊版,不建議)。如需支援 Signature 第 2 版 AWS 區域 的清單,請參閱 中的 Signature 第 2 版簽署程序Amazon Web Services 一般參考。
若要強制執行更快速的 CloudFront 記錄更新,您可以更新 CloudFront 分佈,例如更新 CloudFront 主控台中 General (一般) 索引標籤裡的 Description (描述) 欄位;您更新分佈後,CloudFront 便會立即檢查儲存貯體所在的區域。將變更傳播到所有節點只需幾分鐘即可完成。
使用 MediaStore 容器或 MediaPackage 頻道
若要使用 CloudFront 串流視訊,您可以設定已配置為 MediaStore 容器的 Amazon S3 儲存貯體,或使用 MediaPackage 建立頻道和端點。然後,您可在 CloudFront 中建立及配置分佈來串流視訊。
如需詳細資訊和逐步說明,請參閱以下主題:
使用 Application Load Balancer
您可以使用 CloudFront 將流量路由到內部和面向網際網路的 Application Load Balancer。
如果您的原始伺服器是託管在一或多個 Amazon EC2 執行個體上的一或多個 HTTP(S) 伺服器 (Web 伺服器),您可以選擇使用面向網際網路的 Application Load Balancer 將流量分配到執行個體。面向網際網路的負載平衡器具有可公開解析的 DNS 名稱,並透過網際網路將請求從用戶端路由到目標。
如需使用面向網際網路的 Application Load Balancer 作為 CloudFront 原始伺服器的詳細資訊,包括如何確保檢視器只能透過 CloudFront 存取 Web 伺服器,而不是直接存取負載平衡器,請參閱 限制對 Application Load Balancer 的存取。
或者,您可以使用 VPC 原始伺服器,從虛擬私有雲端 (VPC) 私有子網路中以內部 Application Load Balancer 託管的應用程式交付內容。VPC 原始伺服器可防止您的應用程式在公有網際網路上存取。如需詳細資訊,請參閱使用 VPC 原始伺服器限制存取。
使用 Network Load Balancer
您可以將內部和面向網際網路的 Network Load Balancer 與 Amazon CloudFront 搭配使用。您可以使用 VPC 原始伺服器,將私有子網路內的內部 Network Load Balancer 與 CloudFront 搭配使用。CloudFront VPC 原始伺服器可讓您從私有 VPC 子網路中託管的應用程式提供內容,而無需將其公開至公有網際網路。如需詳細資訊,請參閱使用 VPC 原始伺服器限制存取。
或者,您也可以使用 CloudFront 從面向網際網路的 Network Load Balancer 交付流量。面向網際網路的負載平衡器具有可公開解析的 DNS 名稱,並且可以在網際網路和 CloudFront 分佈上接收來自用戶端的請求。
使用 Lambda 函數 URL
Lambda 函數 URL 是 Lambda 函數的專用 HTTPS 端點。您可以使用 Lambda 函數 URL 來建置完全在 Lambda 內的無伺服器 Web 應用程式。您可以直接透過這個函數 URL 叫用 Lambda Web 應用程式,完全無需與 API Gateway 或 Application Load Balancer 進行整合。
如果您使用 Lambda 函數搭配函數 URLs來建置無伺服器 Web 應用程式,您可以新增 CloudFront 以取得下列優點:
-
在更接近檢視者的位置快取內容,加快應用程式的速度
-
讓您的 Web 應用程式使用自訂網域
-
使用 CloudFront 快取行為將不同的 URL 路徑轉送至不同的 Lambda 函數
-
使用 CloudFront 地理限制和/或 AWS WAF 封鎖特定請求
-
AWS WAF 搭配 CloudFront 使用 可協助保護您的應用程式免受惡意機器人攻擊、協助防止常見的應用程式入侵,並增強對 DDoS 攻擊的保護
若要使用 Lambda 函數 URL 做為 CloudFront 分佈的原始伺服器,請將 Lambda 函數 URL 的完整網域名稱指定為原始伺服器網域。Lambda 函數 URL 網域名稱必須使用以下格式:
function-URL-ID
.lambda-url.AWS-Region
.on.aws
當您使用 Lambda 函數 URL 做為 CloudFront 分佈的原始伺服器時,函數 URL 必須可公開存取。若要這麼做,請使用下列其中一個選項:
-
如果您使用原始存取控制 (OAC),Lambda 函數 URL 的
AuthType
參數必須使用AWS_IAM
值,並在資源型政策中允許lambda:InvokeFunctionUrl
許可。如需針對 OAC 使用 Lambda 函數 URLs 的詳細資訊,請參閱 限制對 AWS Lambda 函數 URL 原始伺服器的存取。 -
如果您不使用 OAC,您可以將函數 URL 的
AuthType
參數設定為 ,NONE
並在以資源為基礎的政策中允許lambda:InvokeFunctionUrl
許可。
您也可以將自訂原始伺服器標頭新增至 CloudFront 傳送至原始伺服器的請求,並撰寫函數程式碼,以便在請求中不存在標頭時傳回錯誤回應。以確保使用者只能透過 CloudFront (無法直接使用 Lambda 函數 URL) 存取您的 Web 應用程式。
如需 Lambda 函數 URL 的詳細資訊,請參閱 AWS Lambda 開發人員指南:
-
Lambda 函數 URL – Lambda 函數 URL 功能的一般概觀
-
叫用 Lambda 函數 URL – 針對編寫無伺服器 Web 應用程式程式碼時須用到的請求和回應承載,提供詳細資訊
-
Lambda 函數 URLs 的安全性和身分驗證模型 – 包含 Lambda 驗證類型的詳細資訊
使用 Amazon EC2 (或其他自訂原始伺服器)
您可以搭配 Amazon CloudFront 使用內部和面向網際網路的 EC2 執行個體。您可以使用 VPC 原始伺服器,將私有子網路內的內部 EC2 執行個體與 CloudFront 搭配使用。CloudFront VPC 原始伺服器可讓您從私有 VPC 子網路中託管的應用程式提供內容,而無需將其公開至公有網際網路。如需詳細資訊,請參閱使用 VPC 原始伺服器限制存取。
自訂原始伺服器是 HTTP(S) Web 伺服器,具有可公開解析的 DNS 名稱,可透過網際網路將請求從用戶端路由到目標。HTTP(S) 伺服器可以託管在 AWS Amazon EC2 執行個體上,也可以託管在其他地方。設為網站端點的 Amazon S3 原始伺服器也會被視為自訂原始伺服器。如需詳細資訊,請參閱使用設定為網站端點的 Amazon S3 儲存貯體。
使用自有的 HTTP 伺服器做為自訂原始伺服器時,您可以指定伺服器的 DNS 名稱,以及 CloudFront 從您的原始伺服器擷取物件時使用的 HTTP 與 HTTPS 連接埠和通訊協定。
使用自訂原始伺服器時,大多數 CloudFront 功能都受支援,但私有內容除外:雖然您可以使用已簽署的 URL 來分配自訂原始伺服器的內容,但是為了讓 CloudFront 存取自訂原始伺服器,該伺服器必須維持在可公開存取的狀態。如需詳細資訊,請參閱使用簽章的 URLs Cookie 提供私有內容。
請依照這些準則,以便使用 Amazon EC2 執行個體和在 CloudFront 下的其他自訂原始伺服器原始伺服器。
-
在所有伺服器上託管與服務相同內容,這些伺服器為相同的 CloudFront 原始伺服器提供的內容。如需詳細資訊,請參閱 分佈設定參考 主題中的 原始設定。
-
如果您需要 支援 或 CloudFront 使用此值進行偵錯,請在所有伺服器上記錄
X-Amz-Cf-Id
標頭項目。 -
限制對您自訂原始伺服器所監聽的 HTTP 與 HTTPS 連接埠提出請求。
-
同步實作中所有伺服器的時鐘。請注意,CloudFront 對已簽署 URL 和已簽署 Cookie、日誌及報告皆使用國際標準時間 (UTC)。此外,如果您使用 CloudWatch 指標來監控 CloudFront 活動,請注意,CloudWatch 也會使用 UTC。
-
使用冗餘伺服器來處理故障。
-
如需有關使用自訂原始伺服器來提供私有內容的詳細資訊,請參閱限制存取自訂原始伺服器上的檔案。
-
如需有關請求和回應行為,以及有關支援的 HTTP 狀態代碼的詳細資訊,請參閱請求和回應行為。
如果您使用 Amazon EC2 做為自訂原始伺服器,建議您執行以下操作:
-
使用 Amazon Machine Image,會自動為 Web 伺服器安裝軟體。如需詳細資訊,請參閱 Amazon EC2 說明文件。
-
使用 Elastic Load Balancing 負載平衡器來處理多個 Amazon EC2 執行個體的流量,並將應用程式與 Amazon EC2 執行個體的變更隔離。例如,如果您使用負載平衡器,則可以新增和刪除 Amazon EC2 執行個體,無需變更應用程式。如需詳細資訊,請參閱 Elastic Load Balancing 說明文件。
-
當您建立 CloudFront 分佈時,請為您的原始伺服器的網域名稱指定負載平衡器的 URL。如需詳細資訊,請參閱建立分發。
使用 CloudFront 原始伺服器群組
例如,當您需要高可用性時,若想要針對案例配置原始伺服器容錯移轉,則您可以為 CloudFront 原始伺服器指定原始伺服器群組。使用原始伺服器容錯移轉來指定 CloudFront 的主要原始伺服器,另外再建立第二部原始伺服器,當主要原始伺服器傳回特定 HTTP 狀態碼故障回應時,CloudFront 會自動切換到第二部伺服器。
如需詳細資訊,包括原始伺服器群組的設定步驟,請參閱使用 CloudFront 原始伺服器容錯移轉最佳化高可用性。
使用 Amazon API Gateway
您可以使用 API Gateway 做為 CloudFront 分佈的自訂原始伺服器。如需詳細資訊,請參閱下列主題: