

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

# 故障診斷 Classic Load Balancer：HTTP 錯誤
<a name="ts-elb-error-message"></a>

HTTP 方法 (也稱為 *verb*) 指定要在接收 HTTP 請求的資源上執行的動作。適用於 HTTP 請求的標準方法是在 RFC 2616 [方式定義](http://tools.ietf.org/html/rfc2616#section-9)中定義的。此標準方法包括 GET、POST、PUT、HEAD 及 OPTIONS。有些 Web 應用程式要求 (有時介紹) 的方法是 HTTP/1.1 方法的延伸。常見 HTTP 延伸方法的範例包括 PATCH、REPORT、MKCOL、PROPFIND、MOVE 和 LOCK。Elastic Load Balancing 接受所有標準和非標準 HTTP 方法。

HTTP 要求和回應使用標頭欄位來傳送有關 HTTP 訊息的資訊。標頭欄位是以冒號分隔的名稱值組，以歸位字元 (CR) 和換行 (LF) 分隔。一組以 RFC 2616 定義的標準 HTTP 標頭欄位，[訊息標頭](http://tools.ietf.org/html/rfc2616#section-4.2)。如需詳細資訊，請參閱[HTTP 標頭和 Classic Load Balancer](x-forwarded-headers.md)。

當負載平衡器收到 HTTP 請求時，它會檢查錯誤的請求及方法的長度。負載平衡器的 HTTP 請求的總方法長度，不得超過 127 個字元。如果 HTTP 請求同時通過兩項檢查，負載平衡器會傳送請求至 EC2 執行個體。如果請求中的方法欄位格式不正確，負載平衡器會回應[HTTP 400: BAD\$1REQUEST](#ts-elb-errorcodes-http400)錯誤。如果請求中的方法長度超過 127 個字元，負載平衡器會回應[HTTP 405: METHOD\$1NOT\$1ALLOWED](#ts-elb-errorcodes-http405)錯誤。

EC2 執行個體會透過實作請求的方法並傳送回應回到用戶端，以處理有效的請求。必須設定您的執行個體，以處理這兩種支援和不支援的方法。

以下是您的負載平衡器傳回的錯誤訊息、可能原因，以及解決問題所需採取的步驟。

**Topics**
+ [HTTP 400: BAD\$1REQUEST](#ts-elb-errorcodes-http400)
+ [HTTP 405: METHOD\$1NOT\$1ALLOWED](#ts-elb-errorcodes-http405)
+ [HTTP 408：請求逾時](#ts-elb-errorcodes-http408)
+ [HTTP 502：無效的閘道](#ts-elb-errorcodes-http502)
+ [HTTP 503：服務無法使用](#ts-elb-errorcodes-http503)
+ [HTTP 504：閘道逾時](#ts-elb-errorcodes-http504)

## HTTP 400: BAD\$1REQUEST
<a name="ts-elb-errorcodes-http400"></a>

**Description**：表示用戶端傳送錯誤的請求。

**原因 1**：用戶端傳送不符合 HTTP 規格的格式錯誤請求。例如，請求不可在 URL 中包含空格。

**原因 2**：用戶端使用 HTTP CONNECT 方法，但 Elastic Load Balancing 不支援該方法。

**解決方案**：直接連接到您的執行個體，並擷取用戶端請求的詳細資訊。檢閱錯誤的請求的標頭和 URL 格式。請確認請求符合 HTTP 規格。請確認未使用 HTTP CONNECT。

## HTTP 405: METHOD\$1NOT\$1ALLOWED
<a name="ts-elb-errorcodes-http405"></a>

**描述**：表示方法長度無效。

**原因**：請求標頭中的方法長度超過 127 個字元。

**解決方案**：檢查方法的長度。

## HTTP 408：請求逾時
<a name="ts-elb-errorcodes-http408"></a>

**描述**：表示用戶端取消請求，或無法傳送完整的請求。

**原因 1**：網路中斷或錯誤的請求建構，例如部分的格式標頭；指定的內容大小不符實際傳輸的內容大小，以此類推。

**解決方案 1**：檢查提出請求的程式碼，並嘗試直接傳送到您註冊的執行個體 (或開發/測試環境)，其讓您更能掌控檢查實際的請求。

**原因 2**：與用戶端連線已關閉 (負載平衡器無法傳送回應)

**解決方案 2**：利用發出請求的機器上的封包偵測程式來確認用戶端未在傳送回應之前關閉連線。

## HTTP 502：無效的閘道
<a name="ts-elb-errorcodes-http502"></a>

**描述**：指出負載平衡器無法剖析從已註冊之執行個體傳送的回應。

**原因**：來自執行個體的錯誤回應，或可能的負載平衡器問題。

**解決方案**：確認從執行個體傳送的回應符合 HTTP 規格。前往 [AWS 支援 Center](https://console.aws.amazon.com/support/home#/) 尋求協助。

## HTTP 503：服務無法使用
<a name="ts-elb-errorcodes-http503"></a>

**描述**：指出執行個體或已註冊的負載平衡器造成錯誤。

**原因 1**：負載平衡器中的容量不足，無法處理請求。

**解決方案 1**：這應該是暫時性問題，不應持續超過幾分鐘時間。如果問題仍存在，請前往 [AWS 支援 Center](https://console.aws.amazon.com/support/home#/) 尋求協助。

**原因 2**：沒有已註冊的執行個體。

**解決方案 2**：在您的負載平衡器設定為回應的每個可用區域中，至少註冊一個執行個體。請透過查看 CloudWatch 中的 `HealthyHostCount` 指標來確認。如果您無法確保在每個可用區域註冊執行個體，我們建議啟用跨區域的負載平衡。如需詳細資訊，請參閱[為 Classic Load Balancer 設定跨區域負載平衡。](enable-disable-crosszone-lb.md)。

**原因 3**：沒有正常運作的執行個體。

**解決方案 3**：請確定在您的負載平衡器設定為回應的每個可用區域中，都有運作狀況良好的執行個體。請透過查看 `HealthyHostCount` 指標來確認。

**原因 4**：突增佇列已滿。

**解決方案 4**：確認您的執行個體有足夠的容量能處理請求速率。請透過查看 `SpilloverCount` 指標來確認。

## HTTP 504：閘道逾時
<a name="ts-elb-errorcodes-http504"></a>

**描述**：指出負載平衡器已關閉連線，因為請求未在閒置逾時期間內完成。

**原因 1**：應用程式需要比設定的閒置逾時更長時間來回應。

**解決方案 1**：監控 `HTTPCode_ELB_5XX` 和 `Latency` 指標。如果這些指標有提高，原因可能是由於應用程式內沒有在閒置逾時時間內回應。如需有關即將逾時的請求的詳細資訊，請在負載平衡器上啟用存取日誌，並檢閱 Elastic Load Balancing 所產生的日誌中的 504 回應碼。如有需要，您可以增加容量或增加設定的閒置逾時，讓冗長的操作 (例如，上傳大型檔案) 可以完成。如需詳細資訊，請參閱[為 Classic Load Balancer 設定閒置連線逾時](config-idle-timeout.md)及[如何排除 Elastic Load Balancing 高延遲問題](https://repost.aws/knowledge-center/elb-latency-troubleshooting)。

**原因 2**：註冊的執行個體關閉與 Elastic Load Balancing 的連線。

**解決方案 2**：啟用在 EC2 執行個體上的持續作用設定，並確保持續作用逾時大於您的負載平衡器的閒置逾時設定。