全部產品
Search
文件中心

Server Load Balancer:ALB常用狀態代碼有哪些及可能原因

更新時間:Jun 19, 2024

在遇到ALB返回異常狀態代碼時,您可以根據狀態代碼的可能原因排查問題。本文為您介紹ALB常用狀態代碼的說明及可能原因。

說明
  • ALB支援開啟訪問日誌,開啟該功能後,可以協助您更快地定位問題。關於如何開啟訪問日誌,請參見訪問日誌

  • 收到異常狀態代碼時,請排查訪問日誌中ALB狀態代碼(status)和後端狀態代碼(upstream_status)是否相同,如果兩者相同,很可能是由於直接透傳後端狀態代碼導致的,建議優先排查後端伺服器透傳狀態代碼的原因。

400(Bad Request)

用戶端HTTP請求格式異常。

可能原因:

  • 後端伺服器直接返回400,ALB透傳後端狀態代碼給用戶端,請排查後端伺服器返回400的原因。

  • HTTP頭部格式錯誤,例如content length與請求body長度不一致等,建議在用戶端抓包分析HTTP請求的格式,並和正常的請求進行比較。

  • ALB執行個體添加了HTTPS監聽,當用戶端發送的請求不是HTTPS請求且返回400狀態代碼時,建議排查用戶端是否有將HTTP請求發送至HTTPS連接埠。

  • 在HTTP請求發送完成前,用戶端主動關閉串連,建議抓包排查用戶端斷連原因。

  • ALB要求每個HTTP header最大不超過32 KB,超過該限制會返回400狀態代碼,建議調整HTTP頭部或標題的長度。

405(Method not allowed)

要求方法不支援。

可能原因:

  • 後端伺服器不支援用戶端請求使用的方法,建議排查用戶端使用方法和後端伺服器的方法是否匹配。例如,在後端伺服器直接測試是否支援特定的method,使用curl -X method ip:port命令排查,其中,method為用戶端請求使用的方法,ip為後端伺服器的IP地址,port為後端伺服器的連接埠。

  • ALB本身不支援TRACE要求方法,建議使用其他方法替換。

408(Request Timeout)

請求逾時,ALB主動中斷連線。

可能原因:

  • 在串連請求逾時時間內,用戶端只傳輸了部分資料(例如只有HTTP header而沒有body),ALB主動中斷連線。建議抓包排查用戶端是否存在效能瓶頸或存在其他異常行為。您也可以通過調大ALB監聽的串連請求逾時時間,觀察是否可以解決該問題。更多資訊,請參見修改監聽

  • 用戶端到ALB的網路鏈路有問題,TCP的rtt(Round Trip Time)比較大或存在丟包等問題,建議排查訪問日誌的request_time和tcpinfo_rtt欄位或抓包排查用戶端網路是否有異常。

  • 訪問ALB執行個體的流量太大,觸發頻寬限速和丟包,建議通過CloudMonitor排查執行個體的出頻寬和丟棄串連數指標。更多資訊,請參見ALB監控項說明查看ALB監控資訊

414(URI too long)

用戶端請求的URI長度超過了後端伺服器能夠解析的長度,因此ALB拒絕對該請求提供服務。

可能原因:

  • 後端伺服器直接返回414,ALB透傳後端狀態代碼給用戶端,請排查後端伺服器返回414的原因。

  • 訪問ALB請求的URI長度限制為32 KB,超過32 KB會返回414狀態代碼,建議縮短URI長度,如果資料量很大建議採用POST傳輸資料(ALB POST請求的body體最大支援50 GB)。

499(Client Close Request)

用戶端主動中斷連線。

可能原因:

  • 用戶端到ALB的網路鏈路有問題,存在rtt(Round Trip Time)比較大或丟包等問題,建議排查訪問日誌的request_time和tcpinfo_rtt欄位或抓包排查用戶端網路是否有異常。

  • 訪問ALB執行個體的流量太大,觸發頻寬限速丟包,建議通過CloudMonitor排查執行個體的出頻寬和丟棄串連數指標。更多資訊,請參見ALB監控項說明查看ALB監控資訊

  • 後端處理請求時間太長,超過了用戶端的請求逾時時間。訪問日誌中的upstream_response_time代表後端處理請求的時間,建議排查後端伺服器的CPU、記憶體、網路是否存在效能瓶頸。

  • 用戶端設定的請求逾時時間太短,導致用戶端未發送完HTTP請求就因為請求逾時關閉了串連,建議排查訪問日誌中的request_time欄位,該欄位代表用戶端請求的總時間,參考該欄位的值設定合理的用戶端請求逾時時間。

  • 用戶端遇到未知問題,在未完成HTTP請求的情況下,提前關閉串連。建議排查用戶端是否有提前關閉串連的行為。

500(Internal Server Error)

後端伺服器內部錯誤,無法執行請求。

可能原因:

  • 後端伺服器直接返回500,ALB透傳後端狀態代碼給用戶端,請排查後端伺服器返回500的原因。

  • 後端伺服器在發送完響應之前異常關閉串連,請在後端伺服器抓包確定並排查請求異常關閉的原因。

502(Bad Gateway)

HTTP或HTTPS監聽接收到用戶端串連請求後,ALB由於無法正常將請求轉寄至後端伺服器或無法從後端伺服器收到響應,則會向用戶端發送HTTP 502 Bad Gateway狀態代碼。

可能原因:

  • 後端伺服器直接返回502,ALB透傳後端狀態代碼給用戶端,請排查後端伺服器返回502的原因。

  • ALB後端伺服器返回其他錯誤的狀態代碼(例如504、444),但ALB統一返回502。建議排查訪問日誌的upstream_status和status欄位或抓包排查後端伺服器是否有異常。

  • ALB與後端伺服器之間TCP通訊異常,請排查後端伺服器的狀態是否正常、服務連接埠是否正常被監聽,或抓包查看TCP握手報文是否正常。

  • 後端伺服器Backlog已滿,導致報文丟棄。建議通過netstat查看後端伺服器的網路統計結果是否有drop的計數,例如netstat -s | grep -i listen

  • 用戶端發送的報文長度超過了後端伺服器的傳輸單元最大值(Maximum Transmission Unit,MTU),表現為健全狀態檢查或報文較短的包正常,但報文較長的包異常。建議在後端伺服器抓包分析報文長度是否符合要求。

  • 後端伺服器返回的報文格式異常或者有非法的HTTP標題。建議在後端伺服器抓包,確認HTTP格式是否正常。

  • ALB後端伺服器沒有及時完成請求處理,請排查後端伺服器的日誌,並查看對應後端伺服器的CPU、記憶體等的佔用率。

503(Service Temporarily Unavailable)

暫時無法使用伺服器,通常是由於流量超限或者後端伺服器不可用。

可能原因:

  • 後端伺服器直接返回503狀態代碼,ALB透傳後端狀態代碼給用戶端,請排查後端伺服器返回503的原因。

  • 用戶端請求的流量觸發了ALB的限速。您可以使用以下三種方式排查:

    • 在CloudMonitor查看執行個體每秒請求數指標 。更多資訊,請參見ALB監控項說明查看ALB監控資訊

    • 由於CloudMonitor的展示是分鐘級的,可能無法展示秒級超限情況,您可以通過訪問日誌查看秒級的請求數。查看訪問日誌的upstream_status欄位,內容為“-”時,表示請求未發送至後端伺服器。

    • 查看響應資料包頭部是否包含欄位“ALB-QPS-Limited:Limited”,若包含,表示請求觸發了ALB的限速。

  • 用戶端訪問ALB時未使用網域名稱而是直接存取ALB的IP,或者使用網域名稱訪問ALB時未及時更新DNS解析結果,導致流量不能在多個ALB IP之間打散,出現503錯誤碼。建議用戶端使用ALB的網域名稱訪問服務,同時盡量確保用戶端均勻地使用DNS返回的IP來訪問服務。

  • ALB監聽沒有配置後端伺服器,或者配置的後端伺服器的權重為0。

504(Gateway Time-out)

後端伺服器響應逾時。

可能原因:

  • 後端伺服器直接返回504狀態代碼,請排查後端伺服器的負載是否過高。

  • ALB向後端伺服器建立串連時,後端伺服器建立連線逾時,逾時時間預設設定為5秒,您可以查看訪問日誌中的upstream_connect_time欄位是否為5秒或者大約為5秒。建議抓包排查後端伺服器響應逾時的原因。

  • 後端伺服器負載增大,響應請求的時間大於所配置的請求逾時時間。比如配置的請求逾時時間是60秒,如果回應時間為60.001秒,ALB將返回504。您可以在CloudMonitor或者訪問日誌中查看問題時間段的延時情況,CloudMonitor查看upstream_rt, 訪問日誌中查看upstream_response_time。