Nginx 不支持大文件

Nginx 不支持大文件

当尝试下载大文件时(不确定什么大小才足够,尝试下载 5Gb),连接卡住了:

$ wget --verbose http://example.net/large.zip -O /dev/null
--2016-12-14 12:52:38--  http://example.net/large.zip
Resolving example.net (example.net)... 1.2.3.4
Connecting to example.net (example.net)|1.2.3.4|:80... connected.
HTTP request sent, awaiting response...

这种情况会永远持续下去,我说的永远是指至少 10 分钟。

nginx 配置此类文件:

location ~* ^.+\.(css|js|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
   access_log off;
   log_not_found off;
   expires 7d;
}

小型静态文件(我指的小型文件例如 50Mb 的文件)可以很好地提供服务。

将 access_log 关闭;改为“打开”没有帮助,因为此请求的日志中没有任何内容。

将文件类型从 zip 更改为其他类型没有帮助。

最奇怪的是,如果我开始下载,然后重启 nginx,下载就会正常开始。但只有这一次。如果在服务器重启后开始另一个下载,它不会以相同的方式工作。

答案1

对我来说,补救措施是以下两种设置:

在文件中: /etc/nginx/nginx.conf

添加:

proxy_max_temp_file_size 0;
proxy_buffering off;

字里行间client_max_body_size 128M;server_names_hash_bucket_size 256;

http {

client_max_body_size 128M;
proxy_max_temp_file_size 0;
proxy_buffering off;
server_names_hash_bucket_size 256;

答案2

答案似乎就在这些链接中。基本上,禁用磁盘缓存

location / {
  proxy_max_temp_file_size 0;
}

答案3

哎呀我弄错了。

此服务器前面配置了一个 CDN。它需要很长时间才能完全获取这些文件,然后才能开始提供这些文件。这就是为什么我重新启动 nginx 时下载立即开始的原因。CDN 提供的文件不完整。

相关内容