我们的用户从 S3 下载随机失败,需要帮助找出问题所在

我们的用户从 S3 下载随机失败,需要帮助找出问题所在

我们有一个文件共享服务,用户可以上传、共享和下载他们的文件。我们使用 AWS S3 来存储我们的文件。

我们面临的问题是,小文件下载正常,但当文件大于 1 GB 时,下载会在一段时间后中断/失败,而且完全是随机的。这种情况大多发生在我们的用户在办公时间下载活动频繁时。用户在下载中断时看到的错误是“失败 - 网络错误”

当用户下载任何文件时,我们都会对该下载进行一些预处理,例如,我们记录下载的文件,保存分析数据,记录带宽等。之后我们直接从 S3 URL 下载文件。

下载文件的代码是:

header('Content-Disposition: attachment; filename="FILENAME.EXT"');
header("Content-Transfer-Encoding: binary");
header("Content-Type: application/octet-stream");
header('X-Accel-Redirect: ' . rawurlencode(  S3_FILEPATH  ) );

以下S3_FILEPATH是一个类似这样的 URL/s3/ PATH_TO_FILE ? QUERY_STRING

该 URL 传递给 nginx 代理设置是:

location ~* ^/s3/(.*) {
  proxy_http_version      1.1;

  proxy_set_header        Authorization '';
  proxy_set_header        Connection "";

  proxy_pass_header       X-Access;
  proxy_hide_header       x-amz-id-2;
  proxy_hide_header       x-amz-request-id;
  proxy_hide_header       x-amz-server-side-encryption;
  proxy_hide_header       x-amz-meta-server-side-encryption;
  proxy_hide_header       x-amz-meta-lastmodifieddate;
  proxy_hide_header       x-amz-meta-size;
  proxy_hide_header       x-amz-meta-type;
  proxy_hide_header       Set-Cookie;
  proxy_ignore_headers    "Set-Cookie";

  resolver                10.0.0.2 valid=300s;
  resolver_timeout        10s;

  proxy_buffering         off;
  proxy_intercept_errors  on;

  proxy_pass              http://s3.amazonaws.com/$1;
}

我似乎无法弄清楚为什么会出现下载速度下降的情况。我做错了什么?我应该怎么做才能使下载可靠?我找到了与配置相关的帮助,但没有找到有关如何使下载可靠的任何信息。

如果社区能帮助我弄清楚为什么会发生这种情况以及我可以做些什么来解决它,我将不胜感激。

相关内容