Nginx 不提供大文件

And*_*rey 6 nginx static-files

尝试下载大文件时(不确定大小是否足够,尝试下载 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...
Run Code Online (Sandbox Code Playgroud)

这将永远持续下去,永远我的意思是至少 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;
}
Run Code Online (Sandbox Code Playgroud)

小的静态文件(我的意思是小的,例如 50Mb 的)可以很好地提供。

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

将文件类型从 zip 更改为另一种类型无济于事。

最奇怪的是,如果我开始下载并在重新启动nginx之后,下载开始就好了。但只有这一个。如果您在服务器重启后开始另一个下载,它不会以同样的方式工作。

Tim*_*Tim 5

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

location / {
  proxy_max_temp_file_size 0;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

对我来说,补救措施是这两个设置:

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

添加:

proxy_max_temp_file_size 0;
proxy_buffering off;
Run Code Online (Sandbox Code Playgroud)

字里行间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;
Run Code Online (Sandbox Code Playgroud)

  • `client_max_body_size` 对我来说已经足够了。我在 Django 中有一个带有 Gunicorn 的应用程序,在 Nginx access.log 上,'504' 总是存在,我想可能是在 Nginx 或 Gunicorn 上有一些超时,甚至是 `limits.conf`(很多文件被请求),但我的应用程序上有一个生成包含数十张图像的 PDF 文件的过程,并且报告有 171Mb。这就是我的故事:)。 (3认同)
  • `client_max_body_size` 对我来说也足够了!我使用 nginx 作为反向代理,当后端发送大量图像时它失败了。现在它完美运行! (2认同)

And*_*rey 2

哎呀我的错误。

该服务器前面配置了 CDN。在开始提供这些文件之前,它需要太多时间才能完全获取这些文件。这就是为什么当我重新启动 nginx 时下载立即开始。CDN 提供的文件不完整。