如何解决从 Amazon S3 上传或下载对象时出现的连接重置错误?

1 分钟阅读
0

当在我的 Amazon Simple Storage Service(Amazon S3)桶中上传或下载对象时,我遇到以下错误之一: 连接重置错误、连接已中止或连接被对等方重置。

解决方法

由于您的应用程序无法与 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 命令行界面(AWS CLI)命令时收到错误,请确保您使用的是最新版本的 AWS CLI

从出现错误的计算机运行 AWS CLI cp 命令,以尝试连接到 Amazon S3 桶。在命令中包括 --debug 标志:

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

分析请求标头、请求方法以及响应。如果问题间歇性出现,并且有几个请求成功,请检查成功请求和失败请求之间是否存在差异。

检查命令的输出,以验证网络环境中的代理是否导致了错误。对于由于 HTTP 代理而发生的错误,输出指示代理错误代理连接失败。如果 SSL 代理导致了错误,则在尝试建立 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 官方
AWS 官方已更新 1 年前