針對 Application Load Balancer 進行疑難排解 - Elastic Load Balancing

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

針對 Application Load Balancer 進行疑難排解

下列資訊有助於排解 Application Load Balancer 的問題。

已註冊目標處於非服務中狀態

如果目標進入 InService 狀態所花的時間超過預期,表示該目標可能未通過運作狀態檢查。您的目標將處於非服務中狀態,除非通過一次運作狀態檢查。如需詳細資訊,請參閱 目標群組運作狀態檢查

確認您的執行個體未通過運作狀態檢查,然後檢查下列問題:

安全群組不允許流量

與執行個體相關聯的安全群組,必須允許來自負載平衡器使用運作狀態檢查連接埠和運作狀態檢查通訊協定傳來的流量。您可以將規則新增到執行個體安全群組,以允許來自負載平衡器安全群組的所有流量。此外,負載平衡器的安全群組必須允許對執行個體的流量。

網路存取控制清單 (ACL) 不允許流量

與執行個體的子網路相關聯的網路 ACL 必須允許透過運作狀態檢查連接埠傳送對內流量,以及透過暫時性連接埠 (1024-65535) 傳送對外流量。與負載平衡器節點的子網路相關聯的網路 ACL 必須允許透過暫時性連接埠傳送對內流量,以及透過運作狀態檢查連接埠和暫時性連接埠傳送對外流量。

ping 路徑不存在

針對運作狀態檢查建立目標頁面,並指定其路徑做為 ping 路徑。

連線逾時

首先,驗證您可以使用目標的私有 IP 地址和運作狀態檢查通訊協定,從網路內直接連接到目標。如果無法連接,請檢查是否過度利用該執行個體,如果它太忙碌而無法回應,便將更多目標新增到您的目標群組。如果您可以連接,則在運作狀態檢查逾時期間之前,目標頁面可能都沒有回應。為運作狀態檢查選擇較簡單的目標頁面,或調整運作狀態檢查設定。

目標未傳回成功的回應代碼

在預設情況下,成功代碼是 200,但您可以在設定運作狀態檢查時選擇性地指定額外的成功代碼。確認負載平衡器預期的成功代碼,並且您的應用程式已設定為在成功時傳回這些代碼。

目標回應碼格式錯誤或連線至目標時發生錯誤

確認您的應用程式回應負載平衡器的運作狀態檢查請求。某些應用程式需要額外的組態來回應健康狀態檢查,例如虛擬主機組態來回應負載平衡器傳送的 HTTP 主機標頭。主機標頭值包含目標的私人 IP 位址,接著是健全狀況檢查連接埠。例如,如果您的目標的私有 IP 地址是10.0.0.10和運作狀態檢查連接埠是8080,負載平衡器在健康狀態檢查中傳送的 HTTP 主機標頭為Host: 10.0.0.10:8080。可能需要虛擬主機組態來回應該主機或預設組態,才能順利檢查應用程式的健全狀況。運作 Health 檢查請求有下列屬性:User-Agent將設為ELB-HealthChecker/2.0,訊息標頭欄位的行結束字元是 CRLF 序列,而標頭會在第一個空白行後面接著 CRLF 終止。

用戶端無法連線到面向網際網路的負載平衡器

如果負載平衡器未回應請求,請檢查下列問題:

您的面向網際網路的負載平衡器已連接到私有子網路

您必須為您的負載平衡器指定公有子網路。公有子網路具有適用您虛擬私有雲端 (VPC) 對網際網路閘道的路由。

安全群組或網路 ACL 不允許流量

負載平衡器的安全群組和負載平衡器子網路的任何網路 ACL,必須允許來自用戶端的傳入流量和連至接聽程式連接埠上用戶端的傳出流量。

負載平衡器顯示提升的處理時間

負載平衡器會根據組態以不同的方式計算處理時間。

  • 如果AWS WAF與您的 Application Load Balancer 器相關聯,且用戶端傳送 HTTP POST 要求,傳送 POST 要求資料的時間會反映在request_processing_time負載平衡器存取記錄中的欄位。這種行為是預期的 HTTP POST 請求。

  • 如果AWS WAF與您的 Application Load Balancer 器沒有關聯,且用戶端傳送 HTTP POST 要求,傳送 POST 要求資料的時間會反映在target_processing_time負載平衡器存取記錄中的欄位。這種行為是預期的 HTTP POST 請求。

負載平衡器會傳送 000 的回應代碼

使用 HTTP/2 連接時,如果任何標頭的壓縮長度超過 8 K 字節,或者如果通過一個連接提供的請求數超過 10,000,則負載平衡器發送 GOAWAY 框架並關閉與 TCP FIN 的連接。

負載平衡器產生 HTTP 錯誤

以下 HTTP 錯誤是由負載平衡器產生。負載平衡器會將 HTTP 程式碼傳送到用戶端,將請求儲存到存取日誌,並遞增 HTTPCode_ELB_4XX_CountHTTPCode_ELB_5XX_Count 指標。

400 錯的請求

可能原因:

  • 用戶端傳送不符合 HTTP 規格的格式錯誤請求。

  • 請求標頭每個請求明細行超過 16 K,每個單一表頭超過 16 K,或整個表頭超過 64 K。

  • 客戶端在發送完整請求主體之前關閉了連接。

401: 未經授權

您設定了接聽程式規則來驗證使用者,但下列其中一項成立:

  • 您已設定OnUnauthenticatedRequest拒絕未經驗證的使用者或 IdP 拒絕存取。

  • IdP 傳回的宣告大小超過負載平衡器支援的大小上限。

  • 用戶端提交了不含主機標頭的 HTTP/1.0 請求,負載平衡器無法產生重新導向 URL。

  • 請求的範圍不會傳回 ID 字符。

  • 您不會在用戶端登入逾時到期之前完成登入程序。如需詳細資訊,請參閱用戶端登入逾時

403:禁止

您配置了AWS WAFWeb 存取控制清單 (Web ACL) 來監控您的 Application Load Balancer 的請求,並封鎖了請求。

HTTP 方法不允許

用戶端使用 TRACE 方法,但 Application Load Balancer 不支援該方法。

HTTP 408: 請求逾時

用戶端在閒置逾時期間過期前不會傳送資料。傳送 TCP 持續作用無法防止此逾時。在每個閒置逾時期間經過前,先傳送至少 1 位元組的資料。視需要提高閒置逾時期間的長度。

HTTP 413: 承載太大

目標是 Lambda 函數,請求內文超過 1 MB。

HTTP 414: URI 太長

請求 URL 或查詢字串參數太大。

HTTP 460

負載平衡器收到來自用戶端的請求,但用戶端在閒置逾時期間經過之前關閉了與負載平衡器的連線。

檢查用戶端逾時期間是否大於負載平衡器的閒置逾時期間。確保您的目標在用戶端逾時期間經過之前向用戶端提供回應,或如果用戶端支援的話,增加用戶端逾時期間以符合負載平衡器閒置逾時。

HTTP 463

負載平衡器收到X-Forwarded-For具有太多 IP 地址的請求頭。IP 位址的上限為 30。

HTTP

負載平衡器收到的傳入要求通訊協定與目標群組通訊協定的版本設定不相容。

可能原因:

  • 請求協議是一個 HTTP/1.1,而目標組協議版本是 gRPC 或 HTTP/2。

  • 請求協議是一個 gRPC,而目標組協議版本是一個 HTTP/1.1。

  • 請求協議是 HTTP/2,請求不是 POST,而目標組協議版本是 gRPC。

HTTP: 內部伺服器錯率

可能原因:

  • 您設定了 AWS WAF Web 存取控制清單 (Web ACL),並且執行 Web ACL 規則時發生錯誤。

  • 負載平衡器無法與 IdP 字符端點或 IdP 使用者資訊端點通訊。

    • 驗證 IdP 的 DNS 是否可公開解析。

    • 驗證您的負載平衡器的安全群組和您的 VPC 的網路 ACL 允許對這些端點的傳出存取。

    • 驗證您的 VPC 具有網際網路存取。如果您有面對內部的負載平衡器,請使用 NAT 閘道來啟用網際網路存取。

HTTP 未導入

負載平衡器收到的 Transfer-Encoding 標頭具有不支援的值。Transfer-Encoding 的支援值為 chunkedidentity​。或者,您可以使用 Content-Encoding 標頭。​

502:無效的閘道

可能原因:

  • 在嘗試建立連線之前,負載平衡器從目標接收 TCP RST。

  • 在嘗試建立連線之前,負載平衡器從目標收到意外的回應,例如「ICMP 目的地無法連線 (主機無法連線)」。檢查是否允許從負載平衡器子網路對目標連接埠上之目標的流量。

  • 當負載平衡器有對目標的未完成請求時,目標關閉了具有 TCP RST 或 TCP FIN 的連線。檢查目標的持續作用持續期間是否短於負載平衡器的閒置逾時值。

  • 目標回應的格式錯誤或包含無效的 HTTP 標頭。

  • 負載平衡器在連接到目標時遇到 SSL 信號交換錯誤或 SSL 信號交換逾時 (10 秒)。

  • 由已取消註冊目標處理的請求取消註冊延遲期間已經過。增加延遲期間,使得耗時操作可以完成。

  • 目標是 Lambda 函數,回應內文超過 1 MB。

  • 目標是一個 Lambda 函數,它沒有在到達設定的逾時之前回應。

  • 目標是傳回錯誤的 Lambda 函數,或是函數受 Lambda 服務限制。

503 服務無法使用

負載平衡器的目標群組沒有已註冊的目標。

504: 閘道逾時

可能原因:

  • 負載平衡器無法在連線逾時過期 (10 秒) 之前建立對目標的連線。

  • 負載平衡器建立了對目標的連線,但目標未在閒置逾時期間經過之前回應。

  • 子網路的網路 ACL 不允許從目標到暫時性連接埠 (1024-65535) 上負載平衡器節點的流量。

  • 目標傳回的內容長度標頭大於實體主體。負載平衡器等候遺失的位元組時逾時。

  • 目標是 Lambda 函數,且 Lambda 服務未在連線逾時期間經過之前回應。

HTTP 505:版本不支援

負載平衡器收到非預期的 HTTP 版本要求。例如,負載平衡器建立了 HTTP/1 連線,但收到 HTTP/2 要求。

HTTP 561: 未經授權

您設定了接聽程式規則來驗證使用者,但 IdP 在驗證使用者時傳回錯誤碼。

目標產生了 HTTP 錯誤

負載平衡器將來自目標的有效 HTTP 回應轉送至用戶端,包括 HTTP 錯誤。目標產生的 HTTP 錯誤會記錄在 HTTPCode_Target_4XX_CountHTTPCode_Target_5XX_Count 指標中。