大文件下载中断主因是nginx默认60秒超时过短,需调高proxy_read_timeout(建议300–600秒)和proxy_send_timeout,关闭proxy_buffering或确保temp目录可用,并配置proxy_http_version 1.1、tcp_nodelay on、gzip off等增强稳定性。

大文件下载时连接中断,根本原因不是网络不稳,而是 Nginx 默认按短请求设计,60 秒超时对几十 MB 以上的文件完全不够用。关键要调高读取超时、关闭缓冲、确保传输链路不卡壳。
重点调高 proxy_read_timeout 和 proxy_send_timeout
这两个参数直接决定 Nginx 能耐心等后端多久返回数据、以及向后端发请求能拖多长时间:
- proxy_read_timeout 必须设为 300 秒(5 分钟)或更高,它控制 Nginx 等待后端响应数据的最长时间;百 MB 文件在弱网下可能需要更久,可设为 600
- proxy_send_timeout 建议同步设为相同值,防止上传 token 或发起下载请求时被中途切断
- proxy_connect_timeout 保持 60 秒即可,仅影响初始建连,一般无需调大
关闭 proxy_buffering 并确认临时目录可用
开启缓冲时,Nginx 会先把整个响应写入磁盘临时文件再推给客户端——这一步极易因空间不足或权限问题失败:
- 在对应 location 块中加 proxy_buffering off;,让响应流式直传,彻底绕过缓存环节
- 若必须保留缓冲(例如需 gzip 或 header 改写),请检查 proxy_temp_path 目录是否存在、可写,且所在分区剩余空间 ≥ 最大下载文件体积
- 必要时调高 proxy_max_temp_file_size(默认 1G),比如设为 2g 或 0(不限制)
补充稳定性配置防长连接断裂
光调超时还不够,某些默认行为会让长连接“悄悄断开”:
- 添加 proxy_http_version 1.1;,确保启用 HTTP/1.1 持久连接
- 开启 tcp_nodelay on;,减少小包延迟,提升大块数据传输效率
- 在下载路径中禁用压缩:gzip off;,避免 gzip 缓冲破坏流式响应边界
- 确认 client_max_body_size 足够(如设为 0 或 4g),部分前端 SDK 可能携带较大认证头
验证是否生效的三步法
改完别急 reload,先快速确认改动起作用:
- 用 curl -v http://your-domain/file.zip 观察全程是否无 504/502,响应头里是否有 Connection: keep-alive
- 查 error.log,搜索 “upstream timed out”、“prematurely closed”、“No space left” 等关键词
- 绕过 Nginx 直连后端服务测试下载,确认问题确实出在代理层而非后端本身











