我们有一个文件共享服务,用户可以上传、共享和下载他们的文件。我们使用 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;
}
我似乎无法弄清楚为什么会出现下载速度下降的情况。我做错了什么?我应该怎么做才能使下载可靠?我找到了与配置相关的帮助,但没有找到有关如何使下载可靠的任何信息。
如果社区能帮助我弄清楚为什么会发生这种情况以及我可以做些什么来解决它,我将不胜感激。