Nginx反向代理大文件下载需精准配置三类参数:在location块中设proxy_read_timeout和proxy_send_timeout为3600,proxy_buffering off,并确保临时目录空间充足、HTTP/1.1长连接启用。

要让 Nginx 反向代理大文件下载不因超时中断,关键不是“调大所有 timeout”,而是精准配置三类参数:连接生命周期、响应传输控制、缓冲行为。默认 60 秒的 proxy_read_timeout 是最常见断连元凶,但只改它往往无效——必须落在正确的配置位置,并配套关闭缓冲或优化落盘机制。
必须在 location 块里设 proxy_read_timeout 和 proxy_send_timeout
这两个值决定 Nginx 等后端数据和发给客户端的最大等待时间。全局 http 块或 server 块里的设置可能被覆盖,务必写在实际处理下载请求的 location 中:
-
proxy_read_timeout 3600;—— 按最大文件大小和最低带宽估算,例如 10GB 文件、2MB/s 带宽,至少需 1400 秒,建议设为 3600(1 小时)留余量 -
proxy_send_timeout 3600;—— 防止向客户端发送响应体时因网络抖动或客户端接收慢而中断 -
proxy_connect_timeout 60;—— 初始建连一般无需过大,60 秒足够;若后端冷启动慢(如 Java 应用),可提到 90–120
关闭 proxy_buffering 实现流式直传
默认开启时,Nginx 会把整个响应先收全再发,导致首字节延迟高、磁盘写满报 “No space left on device” 或 “upstream prematurely closed”。对纯下载路径,直接关闭最稳妥:
- 在对应
location ^~ /download/或location ~ \.zip$块中加:proxy_buffering off; - 保留
proxy_buffer_size 16k;,确保响应头(如 Content-Disposition、Set-Cookie)能完整读取 - 关闭后,
proxy_buffers、proxy_max_temp_file_size等参数自动失效,无需额外调参
检查临时目录空间与协议支持
即使关了 buffering,若用了 gzip 或需 header 改写,仍可能触发临时文件写入。此时要确认:
-
proxy_temp_path所在分区剩余空间 ≥ 最大文件体积(例如下 5GB 文件,至少留 6GB 空闲) -
proxy_max_temp_file_size 2048m;—— 默认 1G,大文件必须调高,64 位系统可设到 2G–4G -
proxy_http_version 1.1;+proxy_set_header Connection '';—— 启用长连接,避免传输中途反复握手 - 下载路径中禁用
gzip off;,防止压缩破坏流式边界
验证是否生效
改完别急 reload,先快速确认:
- 用
curl -v https://yoursite/file.iso 2>&1 | grep "HTTP\|Connection",看是否返回HTTP/1.1 200且Connection: keep-alive - 查
/var/log/nginx/error.log,搜upstream timed out、prematurely closed、No space left—— 出现即说明某环节未配到位 - 绕过 Nginx 直连后端(如
curl http://backend-ip:8080/file.iso),确认下载本身无问题,排除上游故障


















