跳至內容

如何對從 Amazon S3 上傳或下載物件時,發生的 ConnectionReset 錯誤進行疑難排解?

1 分的閱讀內容
0

當我在 Amazon Simple Storage Service (Amazon S3) 儲存貯體中上傳或下載物件時,收到下列其中一個錯誤: ConnectionResetError、Connection Aborted 或 Connection reset by peer。

解決方法

您會遇到連線重置錯誤,是因為您的應用程式無法成功建立與 Amazon S3 端點的連線。這可能是因為在存取 S3 資源時,連線遭關閉或變為非作用中狀態所導致的。這些錯誤是由於應用程式或用戶端層、網路路徑,或任何中繼資源出現問題所引起的。若要確定問題的根本原因,您必須找出導致錯誤的元件。

測試連線性

若要測試連線性,請執行以下命令,檢查機器是否可以透過 HTTP 或 HTTPS 與 S3 建立連線。

$ telnet mybucket.s3.REGION-CODE.amazonaws.com 80  
$ telnet mybucket.s3.REGION-CODE.amazonaws.com 443

繞過 SSL 驗證

在您的請求中包含 --no-verify-ssl 參數以繞過 SSL 驗證。此參數可防止 SSL 憑證接受驗證。但是,該請求會透過連接埠 443 進行傳輸。這個方法可以幫助您隔離與 SSL 驗證相關的問題。

分析網路流量

請進行封包擷取,以分析機器和 Amazon S3 之間的網路流量。分析封包擷取內容,以確定用戶端或伺服器是否發出了 RST 標幟。

  • 如果您的網路發出了 RST 標幟,請記下發出 RST 標幟時的 IP 位址和程序。這些程序包括 DNS 查閱、TCP 交握、SSL 交握和資料傳輸。
  • 如果您的網路在 SSL 交握期間發出了 RST 標幟,請確保您的機器信任 Amazon 傳回的憑證

偵錯連線問題

**注意:**如您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確定您使用的是最新版本的 AWS CLI

在出現錯誤的機器上執行 AWS CLI cp 命令,嘗試連線到 Amazon S3 儲存貯體。在命令中包含 --debug 標幟:

aws s3 cp/sync SOURCE_FILE_PATH/SOURCE_FILE_NAME DESTINATION --debug

分析請求標頭、請求方法以及回應內容。如果問題是間歇性的且有部分請求成功,則檢查成功請求和不成功請求之間是否有差異。

檢查命令的輸出結果,以確認網路環境中的 Proxy 是否導致該錯誤。當錯誤是由 HTTPProxy 而引起時,輸出結果會顯示 Proxy 錯誤Proxy 連線失敗。如果是 SSL Proxy 導致了錯誤,那麼您在嘗試建立 SSL 交握時,會看到其中一種連線重設錯誤。

檢查 HTTP Keep-Alive

請在您的機器上啟用 HTTP Keep-Alive,讓機器使用單一的 TCP 連線來維持多次 HTTP 請求與回應的連線狀態。執行以下命令,以檢查 TCP Keep-Alive 是否已開啟:

curl -Iv s3.amazonaws.com 2>&1 | grep -i 'connection #0'

當 TCP Keep-Alive 開啟時,輸出結果會顯示以下字串:

Connection #0 to host s3.amazonaws.com left intact

查看中繼資源

當中繼資源 (例如 NAT 閘道、防火牆或負載平衡器) 的使用率較高時,它們可能會過早關閉連線。此外,當一段時間內沒有資料寫入或從線路寫入時,它們可能會過早關閉連線並將其標記為無效。

AWS 官方已更新 3 年前