nginx 默认支持 http range 断点续传,需确保未禁用 max_ranges、正确配置 sendfile 与 gzip、透传 range 头、mp4 启用 mp4_module 并 faststart,验证返回 206 及 content-range 头。

Nginx 默认就支持 HTTP Range 请求,只要配置不干扰、文件可读、响应头正确,断点续传就能自动生效,不需要额外模块或开关。
确认基础配置未禁用 Range 功能
Nginx 1.1.3 及以上版本默认启用 range 支持,但以下几项容易误关:
-
max_ranges 0;——会彻底关闭 Range,应删掉或设为非零值,例如
max_ranges 10; - disable_symlinks 配置不当可能使符号链接路径无法返回 206 响应
-
sendfile on; 在某些内核或小文件场景下与 Range 冲突,可临时改为
sendfile off;测试
确保静态文件响应带标准 Range 头
Nginx 对 root 或 alias 下的静态文件(如 zip、mp4、iso)会自动添加 Accept-Ranges: bytes 和 Content-Range,前提是:
- 请求中含合法
Range: bytes=0-999头 - 目标文件存在、大小明确、权限可读
- 未被 gzip 干扰:建议对大文件禁用压缩,加
gzip_disable "range"; - 没被 rewrite、satisfy 或 auth_basic 等指令中途拦截跳过 range 处理逻辑
代理场景下必须透传 Range 相关头
如果 Nginx 是反向代理(比如转发给后端应用或 CDN 回源),默认不会转发 Range 和 If-Range,需显式配置:
proxy_set_header Range $http_range;proxy_set_header If-Range $http_if_range;-
proxy_pass_request_headers on;(确保其他头也不丢失) - 避免对 206 响应做 proxy_cache,建议加
proxy_cache_bypass $http_range;或直接禁用缓存
MP4 视频拖拽播放需额外准备
普通静态文件支持 Range,但 MP4 拖动依赖两个关键条件:
- Nginx 编译时含
--with-http_mp4_module(运行nginx -V | grep mp4验证) - MP4 文件本身是 faststart 格式:用 FFmpeg 加
-movflags +faststart重写 - location 中启用
mp4;指令,并可选调优缓冲:mp4_buffer_size 1m;、mp4_max_buffer_size 5m;
用 curl 快速验证是否生效:curl -I -H "Range: bytes=0-1023" https://your.site/file.zip
成功时返回 HTTP/1.1 206 Partial Content,且含 Accept-Ranges 和 Content-Range 头。若返回 200,说明某环节阻断了 Range 处理。











