CLB異常狀態代碼
建議開啟訪問日誌,協助快速排查 CLB 返回的異常狀態代碼。使用者可以優先排查訪問日誌中的狀態代碼(status)和後端狀態代碼(upstream_status)是否相同。若兩者相同,很可能 CLB 直接透傳了後端狀態代碼,建議優先排查後端服務的異常原因;若只有狀態代碼(status),則可能是用戶端訪問異常導致。
先做這5項快速自檢
在按狀態代碼深入排查前,建議先按順序檢查以下5項配置。這些是 CLB 故障最高頻的根因。
-
運行 CLB 執行個體診斷工具。在 CLB 執行個體列表頁找到目標執行個體,在執行個體診斷列單擊發起診斷,可一鍵檢測執行個體配置、監聽、後端服務等常見問題。
-
確認監聽對應的健全狀態檢查狀態為正常。在執行個體監聽頁查看後端伺服器組的健全狀態檢查狀態。如顯示異常,請參見CLB健全狀態檢查FAQ。
-
確認後端 ECS 未屏蔽
100.64.0.0/10網段。該網段是 CLB 與後端通訊使用的內部網段(阿里雲保留地址,無安全風險)。無需在 ECS 安全性群組中額外配置允許存取策略,但若後端 ECS 的 iptables 或第三方安全軟體攔截了該網段,將導致 CLB 無法訪問後端,觸發 502/504 等異常。 -
確認伺服器組中後端伺服器配置的連接埠與後端服務實際監聽的連接埠一致。在 CLB 伺服器組中為每台後端伺服器配置的連接埠,必須與該伺服器上業務進程實際監聽的連接埠相同。例如伺服器組中配置為
8080,但後端服務實際監聽80,將導致串連失敗。可在後端 ECS 執行ss -tlnp | grep ':<連接埠> '或netstat -tlnp | grep ':<連接埠> '。 -
HTTPS 監聽:確認認證未到期且認證綁定的網域名稱與訪問網域名稱匹配。在監聽詳情頁查看綁定的認證及有效期間。認證到期或網域名稱不匹配會觸發 SSL 握手失敗或返回異常狀態代碼。
502(Bad Gateway)
HTTP 或 HTTPS 監聽接收用戶端請求後,CLB 無法將請求成功轉寄至後端伺服器,或無法從後端伺服器收到響應。
排查思路:先看訪問日誌中 upstream_status 欄位的值,根據該值判斷後續排查方向。
-
當
upstream_status= 502:後端服務自身返回了 502,CLB 透傳給用戶端。請排查後端 Nginx、網關層或應用日誌。 -
當
upstream_status是其他值(如 504、444、500 等):訪問日誌中 CLB 對外返回的status與upstream_status不一致,說明 CLB 做了狀態代碼轉換。請按upstream_status真實值排查後端服務為何返回該狀態代碼(查後端 Nginx、網關或應用日誌)。 -
當
upstream_status為-或為空白:CLB 沒有收到後端的任何響應,說明請求未到達後端、或後端在響應前異常斷開。請按以下順序逐項排查:-
CLB 與後端伺服器 TCP 通訊異常。請排查後端服務狀態是否正常、服務連接埠是否正常監聽、後端 ECS 的 iptables 或第三方安全軟體是否屏蔽了
100.64.0.0/10網段(CLB 與後端通訊使用的內部網段)。可抓包查看 TCP 握手是否正常。 -
後端伺服器 Backlog 已滿。將導致新的串連請求被拒絕或丟棄。可在後端伺服器執行
netstat -s | grep -i listen,查看是否有drop計數。 -
後端伺服器沒有及時處理完請求。請檢查後端伺服器的日誌,並查看 CPU、記憶體等佔用率,確認是否存在效能瓶頸。
-
用戶端發送報文長度超過後端伺服器的 MTU。表現為健全狀態檢查或其他報文較短的包正常,但報文較長的包異常。建議在後端伺服器抓包分析報文長度是否符合要求。
-
後端伺服器響應的報文格式異常或含非法 HTTP 標題。建議在後端伺服器抓包,分析響應報文的格式是否規範。
-
伺服器組中所有後端伺服器健全狀態檢查都異常。CLB 無可用後端,直接返回 502。請排查監聽的健全狀態檢查配置和後端服務狀態,參考如何排查健全狀態檢查異常?。
-
監聽側健全狀態檢查正常,但轉寄策略關聯的伺服器組異常。健全狀態檢查僅針對監聽預設綁定的伺服器組,不覆蓋轉寄策略中配置的伺服器組。如果請求命中了轉寄策略,需要檢查該轉寄策略關聯的伺服器組中後端伺服器的運行狀態。
-
400(Bad Request)
HTTP 要求格式異常。
-
後端伺服器自身返回 400。
upstream_status=400,CLB 透傳。常見於 CLB 訪問後端時使用 HTTP 協議但後端使用 HTTPS 協議、或後端伺服器有特殊的報文校正邏輯。請排查後端服務為何返回 400。 -
用戶端發起的請求 HTTP 頭部格式錯誤。例如
Content-Length與請求 body 長度不一致、要求方法未大寫、Header 超過 32 KB 限制。建議在用戶端抓包分析 HTTP 要求格式,並與正常請求進行比較。 -
用戶端將 HTTP 要求發送到了 CLB 的 HTTPS 監聽連接埠。CLB 拒絕並返回 400。請檢查用戶端是否誤用協議。
-
在 HTTP 要求發送完成前,用戶端主動關閉了串連。建議抓包排查用戶端斷連原因。
405(Method not allowed)
要求方法不支援。
-
後端伺服器不支援用戶端使用的要求方法。
upstream_status=405。可在後端伺服器執行curl -X method ip:port驗證(其中 method 為用戶端要求方法、ip 為後端 IP、port 為後端連接埠)。請排查用戶端方法和後端支援範圍是否匹配。 -
CLB 本身不支援 TRACE 要求方法。建議使用其他方法替換。
408(Request Timeout)
請求逾時,CLB 主動中斷連線。
-
用戶端只傳輸了部分資料。在用戶端到 CLB 請求逾時時間內(預設 60 秒),用戶端只傳輸了部分資料(如只有 HTTP Header 而無 Body)。建議抓包排查用戶端是否存在效能瓶頸或異常行為。
-
用戶端到 CLB 網路鏈路品質差。TCP 的 RTT(Round Trip Time)較大或存在丟包。建議排查訪問日誌中
request_time和tcpinfo_rtt欄位,或在用戶端做網路診斷。 -
訪問 CLB 執行個體的流量過大,觸發頻寬限速和丟包。建議通過CloudMonitor排查執行個體的出頻寬和丟棄串連數指標。
414(URI too long)
用戶端請求的 URI 長度超過限制,CLB 拒絕服務。
-
後端伺服器自身返回 414。
upstream_status=414。後端對 URI 長度的限制比 CLB 更嚴格。請縮短用戶端 URI,或調大後端伺服器對 URI 長度的限制。 -
用戶端請求的 URI 長度超過 CLB 自身 32 KB 限制。請縮短 URI 長度;如資料量大,建議改用 POST 方法將資料放入請求 body。
499(Client Closed Request)
用戶端主動中斷連線。
-
用戶端到 CLB 網路鏈路品質差。TCP 的 RTT 較大或存在丟包。建議排查訪問日誌中
request_time和tcpinfo_rtt欄位,或抓包診斷用戶端網路。 -
訪問 CLB 執行個體的流量過大,觸發頻寬限速和丟包。建議通過CloudMonitor排查執行個體的出頻寬和丟棄串連數指標。
-
後端處理請求時間過長。超過了用戶端的請求逾時時間(訪問日誌中
upstream_response_time代表後端處理時間)。建議排查後端伺服器的 CPU、記憶體、網路是否存在效能瓶頸。 -
用戶端設定的請求逾時時間過短。導致用戶端在請求未完成時關閉串連(訪問日誌中
request_time代表用戶端請求總時間)。建議參考該欄位調整用戶端逾時配置。 -
用戶端遇到未知問題。導致請求未完成時主動關閉串連。建議排查用戶端是否有提前關閉串連的行為。
500(Internal Server Error)
後端伺服器內部錯誤。
-
後端伺服器自身返回 500。
upstream_status=500,CLB 透傳。請結合後端伺服器的錯誤記錄檔排查根因。 -
後端伺服器在發送完響應之前異常關閉了串連。請在後端伺服器抓包排查串連異常關閉的原因。
503(Service Temporarily Unavailable)
服務暫時不可用,通常由於流量超限或後端服務不可用。
-
後端伺服器自身返回 503。
upstream_status=503,CLB 透傳。請結合後端伺服器的日誌排查根因。 -
用戶端請求流量觸發了 CLB 的限速。可通過CloudMonitor查看每秒請求數指標。由於CloudMonitor展示是分鐘級的,可能無法展示秒級超限情況,可通過訪問日誌查看秒級請求數(
upstream_status欄位為-時表示請求未送達後端)。解決方案:
-
提升 CLB 執行個體規格。
-
通過雲解析 DNS 將網域名稱指向多個 CLB 執行個體分攤流量。
-
四層業務可改用 NLB 擷取更大並發。
-
七層業務可改用 ALB 擷取更高 QPS。
-
-
CLB 監聽未配置後端伺服器,或後端伺服器的權重為 0。
504(Gateway Time-out)
後端伺服器響應逾時。
-
後端伺服器自身返回 504。
upstream_status=504,CLB 透傳。常見原因是後端訪問其他內部服務時逾時。請排查後端訪問的其他內部服務。 -
CLB 與後端伺服器建立串連時逾時。建立連線逾時時間預設 5 秒,不可修改。可查看訪問日誌中
upstream_connect_time欄位是否接近 5 秒。建議抓包排查後端響應慢的原因。 -
後端伺服器響應請求的時間超過了 CLB 的請求逾時時間。預設 60 秒。可在CloudMonitor查看
upstream_rt指標,或訪問日誌的upstream_response_time欄位確認。