該如何透過 Classic Load Balancer 發出請求時收到的 HTTP 502 錯誤進行疑難排解?

2 分的閱讀內容
0

在我的用戶端透過 Classic Load Balancer (CLB) 向網站發出請求時,我看到 HTTP 502 錯誤。如何對此進行疑難排解?

簡短描述

HTTP 502 (錯誤閘道) 錯誤可能由下列其中一種原因導致:

  • 在 EC2 執行個體上執行的 Web 伺服器或關聯的後端應用程式伺服器傳回一則訊息,而 Classic Load Balancer 無法剖析。
  • Web 伺服器或關聯的後端應用程式伺服器傳回自己的 502 錯誤訊息。

若要找到這些 502 錯誤的來源,請執行下列動作:

如果後端回應是 ELB 502 錯誤的來源,則問題可能是由下列原因造成的:

  • 回應的各個標頭間包含多個 CRLF
  • 回應包含一個含有非整數的內容長度標頭。
  • 回應主體中的位元組數超過內容長度標頭值。

如果 502 錯誤由後端伺服器產生,請聯絡您的應用程式擁有者。如果 502 錯誤由 Classic Load Balancer 產生,則來自後端的 HTTP 回應格式不正確。請依照下列步驟對 ELB 產生的 502 錯誤進行疑難排解:

解決方案

1.    檢查後端應用程式傳回的回應主體是否符合 HTTP 規格。請參閱 RFC 編輯器中的以下文件:
RFC 7230 – HTTP/1.1:訊息語法和路由
RFC 7231 – HTTP/1.1:語義和內容
RFC 7232 – HTTP/1.1:條件請求
RFC 7233 – HTTP/1.1:範圍請求
RFC 7234 – HTTP/1.1:快取
RFC 7235 – HTTP/1.1:身分驗證

2.    確認回應標頭的語法正確無誤:一個金鑰和值,例如 Content-Type:text。確保 HTTP 回應標頭中不缺少內容長度或傳輸編碼。如需有關 Web 伺服器 HTTP 標頭欄位的詳細資訊,請參閱 HTTP 標頭欄位中的 Internet Assigned Numbers Authority 文件。執行類似下列命令的命令以檢查傳回的 HTTP 回應:

curl -vko /dev/null server_instance_IP

3.    檢查 ELB 存取日誌是否存在重複的 HTTP 502 錯誤。elb_status_code 和 backend_status_code 的 502 錯誤都表示一或多個 Web 伺服器執行個體存在問題。識別哪個 Web 伺服器執行個體存在問題,然後檢查後端 Web 伺服器執行個體的 Web 伺服器日誌。請查看下列適用於部分常用 Web 伺服器和作業系統的日誌位置:

Apache 日誌

  • CentOS、RHEL、Fedora 和 Amazon Linux 的 Web 伺服器日誌位於 /var/log/httpd/ 目錄下。
  • Debian 和 Ubuntu Linux 的 Web 伺服器日誌位於 /var/log/apache2 和 /var/log/lighthttpd/ 目錄下。

NGINX 日誌

  • 在 nginx.conf 檔案中定義 NGINX 存取日誌位置:access_log /path/to/access.log
  • 預設位置為 /var/log/nginx/access.log

IIS 日誌

Windows IIS 7、IIS 7.5 和 IIS 8.0 的 Web 伺服器日誌存放在 inetpub\logs\Logfiles 目錄中。如需有關 Internet Information Server (IIS) 日誌的詳細資訊,請參閱 IIS 7.0 和更新版本中的 HTTP 狀態碼的 Microsoft 文件。如果您已確認 502 錯誤由 ELB 產生,而且後端回應符合 RFC 慣例,請聯絡 AWS Support


相關資訊

對 Classic Load Balancer 進行疑難排解:回應代碼指標

教學:建立 Classic Load Balancer

Elastic Load Balancing 的身分和存取管理

設定 Classic Load Balancer 的運作狀態檢查

Elastic Load Balancing 連線逾時管理

AWS 官方
AWS 官方已更新 2 年前