查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
問題
用戶端應用程式收到 502 Bad Gateway
的 HTTP 狀態碼,其中包含
將程式碼設為 ECONNRESET
,做為 Edge Microgateway 中 API 呼叫的回應。
錯誤訊息
用戶端會看到以下回應代碼:
HTTP/1.1 502 Bad Gateway
回應會包含下列錯誤訊息:
{"message":"socket hang up","code":"ECONNRESET"}
可能原因
原因 | 說明 | 適用的疑難排解操作說明 |
---|---|---|
保持運作逾時設定不正確 | Edge Microgateway 和目標伺服器之間的保持運作逾時設定不正確。 | 邊緣公有雲和私有雲使用者 |
目標伺服器連線過早 | Edge Microgateway 正在傳送時,目標伺服器提前關閉連線 要求酬載 | 邊緣公有雲和私有雲使用者 |
常見的診斷步驟
- 檢查 Edge Microgateway 記錄:
/var/tmp/edgemicro-`hostname`-*.log
- 搜尋代碼
ECONNRESET
是否有502
錯誤 (如果問題是過去發生)?或者, 仍因502
失敗2021-06-23T03:52:24.110Z [error][0:8000][3][myorg][test] [emg_badtarget/flakey/hangup][][][6b089a00-d3d6-11eb-95aa-911f1ee6c684] [microgateway-core][][GET][502][socket hang up][ECONNRESET][]
- 如果記錄層級設為
warn
或info
,也會同時 為[warn]
訊息,內含目標伺服器主機名稱和在第二個執行個體中的通訊埠 元素。本例中為X.X.X.X:8080
, 以便擷取tcpdump
2021-06-23T03:52:24.109Z [warn][X.X.X.X:8080][3][myorg][test][emg_badtarget/flakey/hangup] [][][6b089a00-d3d6-11eb-95aa-911f1ee6c684][plugins-middleware] [targetRequest error][GET][][socket hang up][ECONNRESET][395]
- 錯誤代碼
[socket hang up][ECONNRESET]
表示目標伺服器 已關閉與 Edge Microgateway 的連線。您可以在記錄中搜尋這項資訊, 發生頻率。
原因:保持運作逾時設定不正確
診斷
使用 tcpdump
- 在 Edge Microgateway 和後端伺服器之間擷取
tcpdump
Edge Microgateway 主機作業系統tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- 分析擷取的
tcpdump
:tcpdump 輸出範例: ( 查看大圖片)
在上述
tcpdump
範例中,您可以看到:- 在封包 250288 中,用戶端會傳送
POST
要求。 - 在封包 250371 中,伺服器會以
200 OK
回應。 - 在封包 250559 中,用戶端會傳送
ACK.
- 在封包 250560 中,伺服器會傳送
Continuation
撰寫新的電子郵件訊息 - 在封包 250561 中,用戶端會傳送
ACK.
- 在封包 262436 中,伺服器會將
FIN, ACK
傳送至 啟動連線關閉的用戶端。請注意,這大約是 5 個 秒 (250561)。 - 在封包 262441 中,用戶端會傳送另一個
POST
請求。不過,由於伺服器已開始關閉 以獲得最佳效能和最安全的連線回應的封包包含RST
262441。
在此範例中,至少有一次成功重複使用同一個連線,但 最後一次要求,伺服器會在五秒後開始關閉連線 閒置時間,也就是用戶端傳送新要求的同時。這個 這代表後端伺服器保持運作逾時最有可能短於或等於 在用戶端中設定的值。如要驗證這項資訊,請參閱 比較 Edge Microgateway 和後端伺服器上的保持運作逾時。
- 在封包 250288 中,用戶端會傳送
比較保持運作的逾時
- Edge Microgateway 沒有特定的保持運作逾時屬性。是 會根據執行平台的作業系統而定常見的例子包括 Windows Linux 和 Docker 容器
- 這個選項可能已在作業系統中經過自訂。請與 系統管理員。根據預設,Linux 作業系統預設為保持運作 逾時。
- 接著,檢查後端伺服器上設定的保持運作逾時屬性。我們來 假設您將後端伺服器設為 10 秒
- 如果您發現作業系統保持運作逾時的值為
值大於後端伺服器保持運作逾時屬性值,如
以上就是發生
502
錯誤的原因。
解析度
確保在採用 Edge 的作業系統上,保持運作逾時屬性一律較低 與後端伺服器上的 Microgateway 相比,
- 決定後端伺服器上保持運作逾時的值。
- 為運作中的保持運作逾時屬性設定適當的值 請確保保持運作逾時屬性低於後端設定的值 伺服器,執行您作業系統適用的步驟。
最佳做法
強烈建議您,下游元件的保持運作逾時時間一律較短
門檻值,避免發生這類競爭狀況,
502
個錯誤。每個下游躍點均應低於每個上游躍點。位於邊緣
Microgateway 遵循下列準則是不錯的做法:
用戶端應用程式或負載平衡器的保持運作逾時應小於 Edge Microgateway 保持運作逾時。
如要設定 Edge Microgateway 上的保持運作逾時,請將 價值
keep_alive_timeout
獲得~/.edgemicro/org-env-config.yaml
檔案。edgemicro: keep_alive_timeout: 65000
- Edge Microgateway 作業系統保持運作逾時應小於目標 伺服器保持運作逾時。
- 如果 Edge Microgateway 前面或後方有任何其他躍點,請在相同規則下 請一律保留此通知,因為下游用戶端會自行關閉 與上游的連線
原因:目標伺服器連線過早
診斷
- 按照「常見診斷步驟」的說明步驟,確認是否
收到
[socket hang up][ECONNRESET]
錯誤。 - 如果是,請參照
tcpdump
的協助進一步調查,如下所述。錯誤訊息
[targetRequest error][GET][][socket hang up][ECONNRESET]
則代表 Edge Microgateway 期間發生這個錯誤 將要求傳送至後端 (目標) 伺服器。也就是說,Edge Microgateway 將 向後端伺服器傳送 API 要求,正在等待回應。不過,後端 Edge Microgateway 收到回應之前突然終止連線。 - 檢查您的後端伺服器記錄,看看是否有任何錯誤或資訊 已指示後端伺服器突然終止連線。如果您發現任何錯誤 ,請前往「Resolution」,然後妥善修正問題 正確設定程式碼。
- 如果你在後端伺服器中找不到錯誤或資訊,請先收集
Edge Microgateway 伺服器上的
tcpdump
輸出:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- 分析擷取的
tcpdump
:tcpdump 輸出範例: ( 查看大圖片)
在上述
tcpdump
範例中,您可以看到:- 在封包 4 中,Edge Microgateway 傳送
GET
要求給目標 伺服器 - 在封包 5 中,目標伺服器以
ACK
回應以確認 請求。 - 但是,在封包 6 中,目標不會回應回應酬載,而不是回應酬載
伺服器傳送
FIN, ACK
,啟動關閉連線。 - 在 7 之後的封包中,連線會雙向關閉。連結之前
表示 Edge Microgateway 會在回應送出前關閉,且會傳回 HTTP
502
傳回至用戶端 - 請注意,封包 8 的時間戳記
2021-06-23T03:52:24.110Z
對應至 Edge Microgateway 中記錄到錯誤的時間戳記 。在記錄檔和tcpdump
中,時間戳記通常可以 來關聯錯誤與實際封包之間的關係。
解析度
妥善修正後端伺服器的問題。
如果問題仍未解決,且你需要我們協助排解問題,請
502 Bad Gateway Error
或懷疑 Edge Microgateway 中發生問題,請前往 必須收集診斷資訊。必須收集診斷資訊
如果按照上述說明操作後仍無法解決問題,請收集下列資訊 ,然後與 Apigee Edge 支援團隊聯絡:
- 記錄檔:預設資料夾為
/var/tmp
,但可能遭到覆寫 位於主要config.yaml
檔案 (logging > dir parameter
) 中。是 建議先將log > level
變更為info
,再提供 將記錄檔寫入 Apigee 支援團隊 - 設定檔:Edge Microgateway 的主要設定位於
YAML 檔案位於預設 Edge Microgateway 資料夾中
$HOME/.edgemicro
。另有 名為default.yaml
的預設設定檔,以及每個環境各有一個ORG-ENV-config.yaml
。請上傳這個檔案 完整存取受影響的機構和環境
- 在封包 4 中,Edge Microgateway 傳送