nginx proxy_cache 高效支持大文件分片缓存需启用 ngx_http_slice_module,按固定大小切片回源、分片缓存、按需返回;配置包括定义 slice_cache 缓存区、location 中设置 slice 1m、proxy_cache_key 包含 $slice_range、透传 range 请求头、确保源站支持 206 响应及 content-range 头、调优超时与缓冲参数,并验证分片行为正确性。

要让 Nginx 的 proxy_cache 高效支持大文件分片缓存(比如视频、镜像包),核心不是“缓存整个大文件”,而是利用 ngx_http_slice_module 将一个大响应按固定大小切片回源、分片缓存、按需返回——这样既能降低源站压力,又能提升并发下载和断点续传体验。
启用 slice 模块并配置分片回源
该模块从 Nginx 1.9.8 起内置,但需确认编译时启用了 --with-http_slice_module(主流发行版默认已包含)。关键配置如下:
-
在 http 块中定义专用缓存区:确保
inactive时间足够长(如 24 小时),避免分片被过早清理proxy_cache_path /var/cache/nginx/slice levels=1:2 keys_zone=slice_cache:100m inactive=24h max_size=50g; -
在 location 中启用 slice:例如每片 1MB,适合多数 CDN 和浏览器并发场景
slice 1m; -
必须把 $slice_range 加入缓存 key:否则所有分片都写入同一个 key,导致覆盖或命中失败
proxy_cache_key "$scheme$proxy_host$uri$is_args$args$slice_range"; -
向源站透传 Range 请求头:让后端能正确返回对应字节段
proxy_set_header Range $slice_range;
确保源站和响应头兼容 Range 协议
slice 模块依赖源站真正支持 HTTP Range。若源站不响应 206 或缺失 Content-Range 头,Nginx 会退化为整文件拉取,失去分片意义:
macOS 微信消息自动化工具。通过 GUI 自动化实现:发送消息给指定联系人、读取聊天内容、监控新消息。适用于需要自动化微信操作的场景,如定时发送、批量回复、消息备份等。依赖 peekaboo 进行屏幕截图和 UI 交互。仅支持 macOS。开源地址:https://github.com/chairmanmia...
- 源站需返回标准
Content-Range: bytes 0-1048575/123456789和状态码206 - Nginx 不自动透传原始响应头,需显式添加:
proxy_pass_request_headers on;proxy_hide_header Content-Range;(慎用,仅当源站头异常时临时屏蔽) - 禁用对 206 响应的缓存干扰:
proxy_cache_valid 200 7d;proxy_cache_valid 206 24h;(可设,但不宜过长)proxy_ignore_headers Cache-Control Expires;(防止源站头误禁缓存)
调优传输与稳定性参数
大文件分片回源涉及多次子请求,易受超时、缓冲、连接数限制影响:
- 延长代理超时:
proxy_connect_timeout 60;proxy_send_timeout 300;proxy_read_timeout 300; - 增大临时缓冲区(尤其高并发时):
proxy_buffer_size 128k;proxy_buffers 8 256k;proxy_busy_buffers_size 512k; - 启用零拷贝转发(配合 sendfile):
sendfile on;tcp_nopush on;tcp_nodelay off;
验证与常见避坑点
配置生效 ≠ 行为正确,需实测验证:
- 用
curl -v -r 0-1048575 https://example.com/file.zip观察是否返回206及Content-Range - 检查 Nginx error log 是否出现
upstream sent invalid chunked response或sending to client failed - 避免在同 location 中混用
slice和gzip on:gzip 会破坏Content-Range,必须加gzip_disable "range"; - 不要在 slice 场景下设置
proxy_buffering off:它会干扰 slice 的子请求机制,保持默认on即可










