當我在 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 閘道、防火牆或負載平衡器) 的使用率較高時,它們可能會過早關閉連線。此外,當一段時間內沒有資料寫入或從線路寫入時,它們可能會過早關閉連線並將其標記為無效。