

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 透過 CloudFront 原始伺服器容錯移轉最佳化高可用性
<a name="high_availability_origin_failover"></a>

對於需要高可用性的案例，您可以將 CloudFront 設定為具有原始伺服器容錯移轉。如要開始使用，您可以使用兩個原始伺服器建立*原始伺服器群組*：主要及次要。如果主要原始伺服器無法使用，或是傳回指出故障的特定 HTTP 回應狀態碼，CloudFront 會自動切換至次要原始伺服器。

若要設定原始伺服器容錯移轉，您必須至少分佈兩部原始伺服器。接著，您可以為您的分佈建立原始伺服器群組，其中包含兩個原始伺服器，並將其中一個設為主要原始伺服器。最後，您可以建立或更新快取行為，以使用原始伺服器群組。

如要查看設定原始伺服器群組和設定特定原始伺服器容錯移轉選項的步驟，請參閱 [建立原始伺服器群組](#concept_origin_groups.creating)。

在設定快取行為的原始伺服器容錯移轉之後，CloudFront 會針對檢視者請求執行下列操作：
+ 發生快取命中時，CloudFront 會傳回請求的物件。
+ 快取未中時，CloudFront 會將請求路由至原始伺服器群組中的主要原始伺服器。
+ 當主要原始伺服器傳回不是為容錯移轉設定的狀態碼 (例如 HTTP 2xx 或 3xx 狀態碼) 時，CloudFront 便會將請求的物件提供給檢視者。
+ 發生下列任何一種情況時：
  + 主要原始伺服器會傳回您為容錯移轉設定的 HTTP 狀態碼
  + CloudFront 無法連線至主要原始伺服器 (當 503 設定為容錯移轉代碼時)
  + 來自主要原始伺服器的回應需要太長的時間 (逾時) (當 504 設定為容錯移轉代碼時)

  接著，CloudFront 會將請求路由至原始伺服器群組中的輔助原始伺服器。
**注意**  
對於某些使用案例 (例如串流視訊內容)，您可能希望 CloudFront 快速容錯移轉至次要原始伺服器。若要調整 CloudFront 容錯移轉至次要原始伺服器的速度，請參閱[控制原始伺服器逾時和嘗試次數](#controlling-attempts-and-timeouts)。

CloudFront 會將所有傳入要求路由到主要原始伺服器，即使先前的要求容錯移轉到次要原始伺服器也是如此。CloudFront 只會在向主要原始伺服器傳送請求失敗後，才會向次要原始伺服器傳送請求。

只有當檢視器請求的 HTTP 方法為 `GET`、`HEAD` 或 `OPTIONS` 時，CloudFront 才會容錯移轉至次要原始伺服器。當檢視器傳送不同的 HTTP 方法 (例如，`POST`、`PUT` 等等) 時，CloudFront 不會容錯移轉。

**注意**  
如果在快取行為[快取的 HTTP 方法](DownloadDistValuesCacheBehavior.md#DownloadDistValuesCachedHTTPMethods)中`OPTIONS`未將 設定為 ，則 CloudFront 不會容錯移轉。

下圖說明原始伺服器容錯移轉的運作方式。

![\[原始伺服器容錯移轉的運作方式\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudFront/latest/DeveloperGuide/images/origingroups-overview.png)


**Topics**
+ [建立原始伺服器群組](#concept_origin_groups.creating)
+ [控制原始伺服器逾時和嘗試次數](#controlling-attempts-and-timeouts)
+ [使用原始伺服器容錯移轉與 Lambda@Edge 函數搭配](#concept_origin_groups.lambda)
+ [搭配原始伺服器容錯移轉使用自訂錯誤頁面](#concept_origin_groups.custom-error)

## 建立原始伺服器群組
<a name="concept_origin_groups.creating"></a><a name="create-origin-groups-procedure"></a>

**建立來源群組**

1. 登入 AWS 管理主控台 ，並在 開啟 CloudFront 主控台[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

1. 選擇您要為原始伺服器群組建立的分佈。

1. 選擇 **Origins (原始伺服器)** 索引標籤。

1. 請確定分佈有多個原始伺服器。如果沒有多個原始伺服器，請新增第二個原始伺服器。

1. 在 **Origins (原始伺服器)** 索引標籤上的 **Origin groups (原始伺服器群組)** 窗格中，選擇 **Create Origin Group (建立原始伺服器群組)**。

1. 選擇原始伺服器群組的原始伺服器。新增原始伺服器後，使用箭號來設定優先順序，即哪一個原始伺服器為主要原始伺服器，哪一個為輔助。

1. 輸入原始伺服器群組的名稱。

1. 選擇要用來做為容錯移轉條件的 HTTP 代碼。您可以選擇下列狀態碼的任意組合：400、403、404、416、429、500、502、503 或 504。當 CloudFront 收到的請求中包含其中一個您指定的狀態碼時，便會容錯移轉至輔助原始伺服器。
**注意**  
只有當檢視器請求的 HTTP 方法為 `GET`、`HEAD` 或 `OPTIONS` 時，CloudFront 才會容錯移轉至次要原始伺服器。當檢視器傳送不同的 HTTP 方法 (例如，`POST`、`PUT` 等等) 時，CloudFront 不會容錯移轉。

1. 在**原始伺服器選取條件**下，指定當您的分佈路由檢視器請求時，如何選取原始伺服器。您可以選擇下列選項。  
**預設**  
CloudFront 將使用您在**設定**頁面上指定的預設原始伺服器優先順序。  
**媒體品質分數**  
CloudFront 會追蹤並使用此分數來決定轉送請求的第一個原始伺服器。這也會授權 CloudFront 向原始伺服器群組中的替代原始伺服器提出非同步 `HEAD` 請求，以判斷其媒體品質分數。您只能為 AWS Elemental MediaPackage v2 原始伺服器選擇此選項。如需詳細資訊，請參閱[媒體品質感知彈性](media-quality-score.md)。

1. 選擇 **Create origin group (建立原始伺服器群組)**。

請務必將原始伺服器群組指派為分佈的快取行為的原始伺服器。如需詳細資訊，請參閱[名稱](DownloadDistValuesOrigin.md#DownloadDistValuesId)。

## 控制原始伺服器逾時和嘗試次數
<a name="controlling-attempts-and-timeouts"></a>

依預設，CloudFront 會嘗試連接至原始群組中的主要原始伺服器，長達 30 秒 (嘗試 3 次連線，每次 10 秒)，然後再容錯移轉至次要原始伺服器。對於某些使用案例 (例如串流視訊內容)，您可能希望 CloudFront 更快速容錯移轉至次要原始伺服器。您可以調整以下設定，影響 CloudFront 容錯移轉至次要原始伺服器的速度。如果原始伺服器是次要原始伺服器或不屬於原始群組的原始伺服器，這些設定會影響 CloudFront 回應將 HTTP 504 傳回瀏覽者的速度。

若要更快地容錯移轉，請指定較短的連線逾時、較少的連線嘗試次數或兩者。對於自訂原始伺服器 (包括**使用靜態網站託管所設定的 Amazon S3 儲存貯體)，您也可以調整原始伺服器回應逾時。

**原始伺服器連線逾時**  
原始伺服器連線逾時設定會影響當嘗試建立與原始伺服器的連線時 CloudFront 的等待時間長短。依預設，CloudFront 會等待 10 秒來建立連線，但您可以指定 1-10 秒 (含)。如需更多詳細資訊，請參閱 [連線逾時。](DownloadDistValuesOrigin.md#origin-connection-timeout)。

**原始伺服器連線嘗試次數**  
原始伺服器連線嘗試次數設定會影響 CloudFront 嘗試連線至原始伺服器的次數。依預設，CloudFront 會嘗試連線 3 次，但您可以指定 1-3 (含)。如需更多詳細資訊，請參閱 [連線嘗試](DownloadDistValuesOrigin.md#origin-connection-attempts)。  
對於自訂原始伺服器 (包括使用靜態網站託管所設定的 Amazon S3 儲存貯體)，此設定也會影響在原始伺服器回應逾時時，CloudFront 嘗試從原始伺服器取得回應的次數。

**原始伺服器回應逾時**  
原始伺服器回應逾時 (也稱原始伺服器讀取逾時) 會影響 CloudFront 從原始伺服器接收回應 (或接收完整回應) 的等待時間長短。依預設，CloudFront 會等待 30 秒，但您可以指定 1-120 秒 (含)。如需詳細資訊，請參閱[回應逾時](DownloadDistValuesOrigin.md#DownloadDistValuesOriginResponseTimeout)。

### 如何變更這些設定
<a name="controlling-attempts-and-timeouts-how-to"></a>

**在 [CloudFront 主控台](https://console.aws.amazon.com/cloudfront/v4/home)中變更這些設定**
+ 對於新原始伺服器或新的分佈，您可以在建立資源時指定這些數值。
+ 對於現有分佈中的現有原始伺服器，您可以在編輯原始伺服器時指定這些數值。

如需更多詳細資訊，請參閱 [所有分佈設定參考](distribution-web-values-specify.md)。

## 使用原始伺服器容錯移轉與 Lambda@Edge 函數搭配
<a name="concept_origin_groups.lambda"></a>

您可以使用 Lambda@Edge 函數，與您已利用原始伺服器群組設定的 CloudFront 分佈搭配。如要使用 Lambda 函數，請在建立快取行為時，於原始伺服器群組的[原始伺服器請求或原始伺服器回應觸發條件](lambda-cloudfront-trigger-events.md)中進行指定。當您搭配原始伺服器群組使用 Lambda@Edge 函數時，可能會針對單一瀏覽者請求觸發函數兩次。例如，考量以下情境：

1. 您可以使用原始伺服器請求觸發條件建立 Lambda@Edge 函數。

1. Lambda 函數會在 CloudFront 傳送請求至主要原始伺服器 (快取未中) 時觸發一次。

1. 主要原始伺服器會回應為容錯移轉設定的 HTTP 狀態碼。

1. 當 CloudFront 向次要原始伺服器傳送相同的請求時，會再次觸發 Lambda 函數。

下圖說明當您在原始伺服器請求或回應觸發中包括 Lambda@Edge 函數時，原始伺服器容錯移轉的運作方式。

![\[原始伺服器容錯移轉如何使用 Lambda@Edge 函數\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudFront/latest/DeveloperGuide/images/origingroups-with-lambda-edge.png)


如需使用 Lambda@Edge 觸發的詳細資訊，請參閱[為 Lambda@Edge 函數新增觸發條件](lambda-edge-add-triggers.md)。

如需有關管理 DNS 備援的詳細資訊，請參閱《Amazon Route 53 開發人員指南》**中的[設定 DNS 備援](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-configuring.html)。

## 搭配原始伺服器容錯移轉使用自訂錯誤頁面
<a name="concept_origin_groups.custom-error"></a>

您可以使用自訂錯誤頁面與原始伺服器群組搭配，其方式與您將它們與未針對原始伺服器容錯移轉設定之原始伺服器搭配使用的方式類似。

當您使用原始伺服器容錯移轉時，您可以設定 CloudFront 針對主要或輔助原始伺服器 (或兩者) 傳回自訂錯誤頁面：
+ **針對主要原始伺服器傳回自訂錯誤頁面** ‒ 如果主要原始伺服器傳回未針對容錯移轉設定的 HTTP 狀態碼，CloudFront 便會將自訂錯誤頁面傳回瀏覽者。
+ **針對輔助原始伺服器傳回自訂錯誤頁面** ‒ 如果 CloudFront 從輔助原始伺服器收到故障狀態碼，CloudFront 便會傳回自訂錯誤頁面。

如需使用自訂錯誤頁面與 CloudFront 搭配的詳細資訊，請參閱 [產生自訂錯誤回應](GeneratingCustomErrorResponses.md)。