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

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

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

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

  • 在 Classic Load Balancer 上啟用 ELB 存取日誌,以查看各個請求的後端和 Elastic Load Balancing (ELB) 回應代碼。存取日誌項目包含兩個欄位:elb_status_code backend_status_code。使用這些代碼確定 502 錯誤的來源。
  • 檢視負載平衡器 CloudWatch 指標,以了解 HTTPCode_Backend_5XX 指標下顯示的後端產生的 502 錯誤。ELB 產生的 502 錯誤顯示在 HTTPCode_ELB_5XX 指標下。

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

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

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

1.檢查後端應用程式傳回的回應主體是否符合下列 RFC 中提及的 HTTP 規格:
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 標頭欄位的清單。執行類似下列命令的命令以檢查傳回的 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、IIS 7.5 和 IIS 8.0 中的 HTTP 狀態碼。如果您已確認 502 錯誤由 ELB 產生,而且後端回應符合 RFC 慣例,請聯絡 AWS Support


此頁面是否有幫助? |

返回 AWS Support 知識中心

需要協助嗎? 瀏覽 AWS Support Center

發佈日期:2016-09-09

更新日期:2018-04-10