nginx原生支持大文件断点续传,关键在于透传range请求头、禁用缓存干扰、确保后端正确响应206状态码,并调优超时参数。需配置proxy_set_header range/if-range、proxy_cache_bypass $http_range、proxy_read_timeout等。

Nginx 作为反向代理支持大文件断点续传下载,关键不是“开启某个开关”,而是确保 Range 请求能完整透传、后端能正确响应 206、Nginx 自身不干扰字节范围逻辑。只要配置得当,无需额外模块,原生即可稳定工作。
必须透传 Range 相关请求头
Nginx 默认不转发 Range 和 If-Range 头,代理场景下若不显式设置,后端根本收不到断点信息:
-
proxy_set_header Range $http_range; -
proxy_set_header If-Range $http_if_range; -
proxy_pass_request_headers on;(确保其他头如Accept-Encoding等也不被意外截断)
避免缓存干扰 206 响应
206 Partial Content 是动态范围响应,不能被缓存覆盖或合并:
- 添加
proxy_cache_bypass $http_range;,让带 Range 的请求跳过缓存 - 或直接禁用该 location 的缓存:
proxy_cache off; - 切勿使用
proxy_cache_valid 206 ...,这会导致多段响应被错误复用
确保后端真正支持 Range
Nginx 只负责转发和组装,最终是否返回 206 由后端决定:
- 后端需识别
Range: bytes=xxx-yyy并校验文件可读、长度明确 - 静态文件服务(如 Spring Boot 的
ResourceHttpRequestHandler)默认支持;若为自定义接口,需手动解析 Range 并写入Content-Range、设状态码为 206 - 用
curl -I -H "Range: bytes=0-1023"直连后端验证,确认返回206和Content-Range
调优连接与超时参数
大文件流式传输易受超时中断,尤其在弱网或长拖拽播放时:
-
proxy_read_timeout 600;(防止后端慢响应被断开) -
send_timeout 300;(保障 Nginx 向客户端持续发送不超时) -
client_body_timeout 60; client_header_timeout 60;(防慢速客户端握手阻塞) - 若后端是 HTTP/1.1,建议开启
proxy_http_version 1.1;并添加proxy_set_header Connection '';
不复杂但容易忽略











