Nginx支持大文件断点续传的核心是正确响应HTTP Range请求并返回206状态,需启用range模块、禁用max_ranges 0、避免slice指令、开启sendfile、添加Accept-Ranges头、禁用Range请求的gzip压缩,并在反代场景透传Range头及绕过缓存。

Linux 下配置 Nginx 支持大文件分片下载与断点续传,核心不是“让 Nginx 主动分片”,而是确保它能正确响应标准 HTTP Range 请求、不干扰 206 响应、并稳定服务超大文件。Nginx 本身不管理下载状态或客户端进度,只负责按需返回字节范围——真正的分片与续传由客户端(如浏览器、aria2c、curl -C -)驱动。
确认并启用原生 Range 支持
Nginx 1.1.3+ 默认开启 range 模块,但需检查未被意外禁用:
- 删除或注释掉配置中类似
max_ranges 0;的语句(它会彻底关闭 Range 功能) - 避免在静态文件 location 中使用
slice指令(如slice 1m;),除非你明确要做 HLS/DASH 动态切片;普通断点下载无需 slice - 确保
sendfile on;启用(对大文件传输更高效),若遇到小文件 206 异常可临时关掉测试
静态文件服务:直接提供 MP4/ZIP 等大文件
当 Nginx 直接读取磁盘文件(用 root 或 alias),无需代理,天然支持 206:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 显式添加响应头:
add_header Accept-Ranges bytes;(推荐,增强客户端识别) - 禁用对 Range 请求的 gzip 压缩:
gzip_disable "range";(否则可能破坏 Content-Range) - 避免
gzip on;对大二进制文件生效,或单独为视频/压缩包类型关闭压缩
反向代理场景:后端是 PHP/Node.js 等应用
若文件由后端动态生成或校验(如鉴权下载),必须透传 Range 头并绕过缓存:
- 透传请求头:
proxy_set_header Range $http_range;和proxy_pass_request_headers on; - 强制跳过缓存:
proxy_cache_bypass $http_range;和proxy_no_cache $http_range; - 禁止缓存 206 响应:
proxy_ignore_headers Cache-Control Expires;,且不要写proxy_cache_valid 206 ... - 确保后端实际支持 Range(例如 PHP 需手动解析
$_SERVER['HTTP_RANGE']并输出 206)
稳定性调优:应对几十 GB 文件长连接
防止超时、缓冲溢出或句柄耗尽:
- 延长超时:
client_header_timeout 60;、client_body_timeout 600;、send_timeout 300; - 优化 TCP:
tcp_nopush on;+tcp_nodelay on;(兼顾吞吐与响应延迟) - 缓存文件句柄:
open_file_cache max=1000 inactive=20s;+open_file_cache_valid 30s; - 允许大请求体(虽下载不用 body,但防误判):
client_max_body_size 0;

















