本文為您介紹CLB常用狀態代碼的說明及可能原因。在遇到CLB返回異常狀態代碼時,您可以根據狀態代碼的可能原因排查問題。
收到異常狀態代碼時,請您關注訪問日誌中狀態代碼(status)和後端狀態代碼(upstream_status)。如果兩者相同,很可能是由於直接透傳後端狀態代碼導致的,建議優先排查後端伺服器返回狀態代碼的原因;如果只有狀態代碼(status),則可能是由於用戶端訪問異常導致的。
CLB支援開啟訪問日誌,開啟該功能後,可以協助您更快地定位問題。關於如何開啟訪問日誌,請參見配置訪問日誌。
400(Bad Request)
HTTP請求格式異常。
後端狀態代碼(upstream_status)的可能原因:
CLB訪問後端伺服器時使用HTTP協議,而後端伺服器使用HTTPS協議。建議您選擇以下方式解決:
後端伺服器使用HTTP協議。
使用應用型負載平衡ALB產品,並建立後端協議為HTTPS的伺服器組。具體操作,請參見建立和管理伺服器組。
CLB通過了對報文的校正,但後端伺服器有特殊的報文校正邏輯。建議排查後端伺服器報文校正失敗的原因。
CLB狀態代碼(status)的可能原因:
後端伺服器直接返回400,CLB透傳後端狀態代碼給用戶端。建議排查後端狀態代碼返回400的原因。
用戶端發起的請求HTTP頭部格式錯誤,例如content length與請求body長度不一致、要求方法未大寫、通過HTTP協議訪問了HTTPS服務等。建議在用戶端抓包分析HTTP請求的格式,並和正常的請求進行比較。
CLB執行個體添加了HTTPS監聽,當用戶端發送的請求不是HTTPS請求且返回400狀態代碼時,建議排查用戶端是否有將HTTP請求發送至HTTPS連接埠。
在HTTP請求發送完成前,用戶端主動關閉串連,建議抓包排查用戶端斷連原因。
CLB要求每個HTTP header最大不超過32 K B,超 過該限 制會返回400狀態代碼,建議調整HTTP頭部或標題長度。
405(Method not allowed)
要求方法不支援。
後端狀態代碼(upstream_status)的可能原因:後端伺服器不支援用戶端請求使用的方法,建議排查用戶端使用方法和後端伺服器的方法是否匹配。例如,在後端伺服器直接測試是否支援特定的method,使用curl -X method ip:port
命令排查,其中,method
為用戶端請求使用的方法,ip
為後端伺服器的IP地址,port
為後端伺服器的連接埠。
CLB狀態代碼(status)的可能原因:
CLB本身不支援TRACE要求方法,建議使用其他方法替換。
後端伺服器直接返回405,CLB透傳狀態代碼給用戶端。建議排查後端狀態代碼返回405的原因。
408(Request Timeout)
請求逾時,CLB主動中斷連線。
CLB狀態代碼(status)的可能原因:
在串連請求逾時時間內,用戶端只傳輸了部分資料(例如只有HTTP header而沒有body),CLB主動中斷連線。建議抓包排查用戶端是否存在效能瓶頸或存在其他異常行為。您也可以通過調大CLB監聽的串連請求逾時時間,觀察是否可以解決該問題。更多資訊,請參見負載平衡服務FAQ。
用戶端到的CLB網路鏈路有問題,TCP的rtt(Round Trip Time)比較大或存在丟包等問題,建議排查訪問日誌的request_time和tcpinfo_rtt欄位或抓包排查用戶端網路是否有異常。
訪問CLB執行個體的流量太大,觸發頻寬限速和丟包,建議通過CloudMonitor排查執行個體的出頻寬和丟棄串連數指標。更多資訊,請參見查看CLB監控資訊。
414(URI too long)
用戶端請求的URI長度超過了後端伺服器能夠解析的長度,因此CLB拒絕對該請求提供服務。
後端狀態代碼(upstream_status)的可能原因:後端服務直接返回414時,建議您選擇以下方式解決:
縮短URI長度,可採用POST傳輸資料。
調大後端伺服器對用戶端請求URI的長度限制。
CLB狀態代碼(status)的可能原因:
後端伺服器直接返回414,CLB透傳後端狀態代碼給用戶端。建議排查後端伺服器返回414的原因。
訪問CLB請求的URI長度限制為32 KB,超過32 KB會返回414狀態代碼。建議縮短URI長度,如果資料量很大建議採用POST傳輸資料。
499(Client Close Reqeust)
用戶端主動中斷連線。
CLB狀態代碼(status)的可能原因:
用戶端到CLB的網路鏈路有問題,存在rtt(Round Trip Time)比較大或丟包等問題,建議排查訪問日誌的request_time和tcpinfo_rtt欄位,或抓包排查用戶端網路是否有異常。
訪問CLB執行個體的流量太大,觸發頻寬限速丟包,建議通過CloudMonitor排查執行個體的出頻寬和丟棄串連數指標。更多資訊,請參見查看CLB監控資訊 。
後端處理請求時間太長,超過了用戶端的請求逾時時間。訪問日誌中的upstream_response_time代表後端處理請求的時間,建議排查後端伺服器的CPU、記憶體、網路是否存在效能瓶頸。
用戶端設定的請求逾時時間太短,導致用戶端未發送完HTTP請求就因為請求逾時關閉了串連。建議排查訪問日誌中的request_time欄位,該欄位代表用戶端請求的總時間,參考該欄位的值設定合理的用戶端請求逾時時間。
用戶端遇到未知問題,在未完成HTTP請求的情況下,提前關閉串連。建議排查用戶端是否有提前關閉串連的行為。
500(Internal Server Error)
後端伺服器內部錯誤,無法執行請求。
後端狀態代碼(upstream_status)的可能原因:後端伺服器返回500,建議結合後端伺服器上的錯誤記錄檔等工具,排查報錯的原因。
CLB狀態代碼(status)的可能原因:
後端伺服器直接返回500,CLB透傳後端狀態代碼給用戶端。建議排查後端狀態代碼返回500的原因。
後端伺服器在發送完響應之前異常關閉串連。建議在後端伺服器抓包排查請求異常關閉的原因。
502(Bad Gateway)
HTTP或HTTPS監聽接收到用戶端串連請求後,CLB由於無法正常將請求轉寄至後端伺服器或無法從後端伺服器收到響應,則會向用戶端發送HTTP 502 Bad Gateway狀態代碼。
後端狀態代碼(upstream_status)的可能原因:
CLB與後端伺服器之間TCP通訊異常。建議排查後端伺服器的狀態是否正常、服務連接埠是否正常被監聽,或抓包查看TCP握手報文是否正常。
後端伺服器負載過高,導致響應失敗。如後端Backlog已滿,導致報文丟棄。建議通過netstat查看後端伺服器的網路統計結果是否有drop的計數,例如
。
用戶端發送的報文長度超過了後端伺服器的傳輸單元最大值(Maximum Transmission Unit,MTU),表現為健全狀態檢查或報文較短的包正常,但報文較長的包異常。建議在後端伺服器抓包分析報文長度是否符合要求。
後端伺服器返回的報文格式異常或者有非法的HTTP標題。建議在後端伺服器抓包確認HTTP格式是否正常。
CLB後端伺服器沒有及時完成請求處理。建議排查後端伺服器的日誌,並查看對應後端伺服器的CPU、記憶體等的佔用率。
CLB狀態代碼(status)的可能原因:
後端伺服器直接返回502,CLB透傳後端狀態代碼給用戶端。建議排查後端狀態代碼返回502的原因。
CLB後端伺服器返回其他錯誤的狀態代碼(例如504、444),但CLB統一返回502。建議排查訪問日誌的upstream_status和status欄位或抓包排查後端伺服器是否有異常。
同一個伺服器組的所有後端伺服器健全狀態檢查都異常,與之關聯的CLB執行個體無法轉寄請求,直接返回502。建議排查監聽的健全狀態檢查是否正常。更多資訊,請參見健全狀態檢查FAQ。
503(Service Temporarily Unavailable)
暫時無法使用伺服器,通常是由於流量超限或者後端伺服器不可用。
後端狀態代碼(upstream_status)的可能原因:後端伺服器返回503,建議結合後端伺服器上的日誌等工具,排查報錯的原因。
CLB狀態代碼(status)的可能原因::
後端伺服器直接返回503狀態代碼,CLB透傳後端狀態代碼給用戶端。建議排查後端狀態代碼返回503的原因。
用戶端請求的流量觸發了CLB的限速。CLB執行個體規格的相關介紹,請參見CLB執行個體概述。建議您選擇以下方式解決:
提升執行個體規格。具體操作,請參見隨用隨付執行個體變更配置。
通過Alibaba Cloud DNS將網域名稱指向多個CLB執行個體,達到擴容的效果。
四層負載如需更大並發串連數,請選擇網路型負載平衡NLB產品;七層負載如需更高的QPS,請選擇應用型負載平衡ALB產品。更多資訊,請參見什麼是應用型負載平衡ALB和什麼是網路型負載平衡NLB。
您可以通過以下兩種方式查看CLB執行個體的效能指標:
通過在CloudMonitor查看執行個體每秒請求數指標 。更多資訊,請參見查看CLB監控資訊。
由於CloudMonitor的展示是分鐘級的,可能無法展示秒級超限情況,您可以通過訪問日誌查看秒級的請求數。查看訪問日誌的upstream_status欄位,內容為“-”時,表示請求未發送至後端伺服器。
CLB監聽沒有配置後端伺服器,或者配置的後端伺服器的權重為0。
504(Gateway Time-out)
後端伺服器響應逾時。
後端狀態代碼(upstream_status)的可能原因:後端伺服器直接返回504狀態代碼,建議排查是否由於後端伺服器訪問其他內部服務,造成響應逾時。
CLB狀態代碼(status)的可能原因:
後端伺服器直接返回504狀態代碼,CLB透傳後端狀態代碼給用戶端。建議排查後端狀態代碼返回504的原因。
CLB向後端伺服器建立串連時,後端伺服器建立連線逾時,一般後端伺服器響應逾時時間預設設定為5秒,您可以查看訪問日誌中的upstream_connect_time欄位是否為5秒或者大約為5秒。建議抓包排查後端伺服器響應逾時的原因。
後端伺服器負載增大,響應請求的時間大於所配置的請求逾時時間。比如配置的請求逾時時間是60秒,如果回應時間為60.001秒,CLB將返回504。您可以在CloudMonitor或者訪問日誌中查看問題時間段的延時情況,CloudMonitor查看upstream_rt, 訪問日誌中查看upstream_response_time。