502 閘道錯誤 - 掛斷電話掛斷

查看 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 正在傳送時,目標伺服器提前關閉連線 要求酬載 邊緣公有雲和私有雲使用者

常見的診斷步驟

  1. 檢查 Edge Microgateway 記錄:
    /var/tmp/edgemicro-`hostname`-*.log
    
  2. 搜尋代碼 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][]
    
  3. 如果記錄層級設為 warninfo,也會同時 為 [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]
    
  4. 錯誤代碼 [socket hang up][ECONNRESET] 表示目標伺服器 已關閉與 Edge Microgateway 的連線。您可以在記錄中搜尋這項資訊, 發生頻率。

原因:保持運作逾時設定不正確

診斷

  1. 按照「常見診斷步驟」中的步驟,確認 [socket hang up][ECONNRESET] 錯誤。
  2. 如果有,請參見下列協助進一步調查: tcpdump,如下所述:

使用 tcpdump

  1. 在 Edge Microgateway 和後端伺服器之間擷取 tcpdump Edge Microgateway 主機作業系統
    tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
    
  2. 分析擷取的 tcpdump

    tcpdump 輸出範例: ( 查看大圖片)

    在上述 tcpdump 範例中,您可以看到:

    1. 在封包 250288 中,用戶端會傳送 POST 要求。
    2. 在封包 250371 中,伺服器會以 200 OK 回應。
    3. 在封包 250559 中,用戶端會傳送 ACK.
    4. 在封包 250560 中,伺服器會傳送 Continuation 撰寫新的電子郵件訊息
    5. 在封包 250561 中,用戶端會傳送 ACK.
    6. 在封包 262436 中,伺服器會將 FIN, ACK 傳送至 啟動連線關閉的用戶端。請注意,這大約是 5 個 秒 (250561)。
    7. 在封包 262441 中,用戶端會傳送另一個 POST 請求。不過,由於伺服器已開始關閉 以獲得最佳效能和最安全的連線回應的封包包含 RST 262441

    在此範例中,至少有一次成功重複使用同一個連線,但 最後一次要求,伺服器會在五秒後開始關閉連線 閒置時間,也就是用戶端傳送新要求的同時。這個 這代表後端伺服器保持運作逾時最有可能短於或等於 在用戶端中設定的值。如要驗證這項資訊,請參閱 比較 Edge Microgateway 和後端伺服器上的保持運作逾時

比較保持運作的逾時

  1. Edge Microgateway 沒有特定的保持運作逾時屬性。是 會根據執行平台的作業系統而定常見的例子包括 Windows Linux 和 Docker 容器
  2. 這個選項可能已在作業系統中經過自訂。請與 系統管理員。根據預設,Linux 作業系統預設為保持運作 逾時。
  3. 接著,檢查後端伺服器上設定的保持運作逾時屬性。我們來 假設您將後端伺服器設為 10 秒
  4. 如果您發現作業系統保持運作逾時的值為 值大於後端伺服器保持運作逾時屬性值,如 以上就是發生 502 錯誤的原因。

解析度

確保在採用 Edge 的作業系統上,保持運作逾時屬性一律較低 與後端伺服器上的 Microgateway 相比,

  1. 決定後端伺服器上保持運作逾時的值。
  2. 為運作中的保持運作逾時屬性設定適當的值 請確保保持運作逾時屬性低於後端設定的值 伺服器,執行您作業系統適用的步驟。

最佳做法

強烈建議您,下游元件的保持運作逾時時間一律較短 門檻值,避免發生這類競爭狀況, 502 個錯誤。每個下游躍點均應低於每個上游躍點。位於邊緣 Microgateway 遵循下列準則是不錯的做法:

  1. 用戶端應用程式或負載平衡器的保持運作逾時應小於 Edge Microgateway 保持運作逾時。

    如要設定 Edge Microgateway 上的保持運作逾時,請將 價值 keep_alive_timeout 獲得 ~/.edgemicro/org-env-config.yaml 檔案。

    edgemicro:
      keep_alive_timeout: 65000
    
  2. Edge Microgateway 作業系統保持運作逾時應小於目標 伺服器保持運作逾時。
  3. 如果 Edge Microgateway 前面或後方有任何其他躍點,請在相同規則下 請一律保留此通知,因為下游用戶端會自行關閉 與上游的連線
,瞭解如何調查及移除這項存取權。

原因:目標伺服器連線過早

診斷

  1. 按照「常見診斷步驟」的說明步驟,確認是否 收到 [socket hang up][ECONNRESET] 錯誤。
  2. 如果是,請參照 tcpdump 的協助進一步調查,如下所述。

    錯誤訊息 [targetRequest error][GET][][socket hang up][ECONNRESET] 則代表 Edge Microgateway 期間發生這個錯誤 將要求傳送至後端 (目標) 伺服器。也就是說,Edge Microgateway 將 向後端伺服器傳送 API 要求,正在等待回應。不過,後端 Edge Microgateway 收到回應之前突然終止連線。

  3. 檢查您的後端伺服器記錄,看看是否有任何錯誤或資訊 已指示後端伺服器突然終止連線。如果您發現任何錯誤 ,請前往「Resolution」,然後妥善修正問題 正確設定程式碼。
  4. 如果你在後端伺服器中找不到錯誤或資訊,請先收集 Edge Microgateway 伺服器上的 tcpdump 輸出:
    tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
    
  5. 分析擷取的 tcpdump

    tcpdump 輸出範例: ( 查看大圖片)

    在上述 tcpdump 範例中,您可以看到:

    1. 在封包 4 中,Edge Microgateway 傳送 GET 要求給目標 伺服器
    2. 在封包 5 中,目標伺服器以 ACK 回應以確認 請求。
    3. 但是,在封包 6 中,目標不會回應回應酬載,而不是回應酬載 伺服器傳送 FIN, ACK,啟動關閉連線。
    4. 7 之後的封包中,連線會雙向關閉。連結之前 表示 Edge Microgateway 會在回應送出前關閉,且會傳回 HTTP 502 傳回至用戶端
    5. 請注意,封包 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。請上傳這個檔案 完整存取受影響的機構和環境