令我苦恼的是,当使用 Nginx 处理 1.8 Gb 文件时,当我将 URL 放入 Chrome 或 Firefox 中时,下载速度为 5 Mb/s,而当我使用 wget 或 curl 执行此操作时,相同的 URL,相同的客户端 PC,下载速度为(我的最大值)25 Mb/s。使用 Apache 处理相同的文件时,浏览器和 curl/wget 的下载速度均为 25Mb/s。我的问题是:为什么?
这是一个非常默认的配置,我将 X-Sendfile (apache2) 或 X-Accel-Redirect (Nginx) 放在标头中,我尝试了 nginx 的几种配置,我可以使用 limit_rate 减慢它的速度,但不能加快。这是我在 /etc/nginx/sites-enabled 中的默认链接的位置部分:
location files/ {
internal;
alias /var/www/html/;
#directio 100m;
output_buffers 2 512k;
limit_rate 30000k;
sendfile_max_chunk 0;
}
我打开了 directio,保留或保留其他选项,打开/关闭 sendfile,没有区别。
答案1
显然,Apache2 会自动填写大小和文件类型的标题,而 Nginx 在未指定时,则使用 text/html 作为类型,而不使用大小。
因此,添加:
header("Content-Type: application/octet-stream");
header("Content-length: {$result[0]->size}");
下载速度提高了约 5 倍,可适应我的最大带宽。