nginx 自1.9.8起内置slice模块(ngx_http_slice_module),默认不启用但无需额外下载;编译时添加--with-http_slice_module参数即可启用,并在nginx.conf中配置slice指令实现大文件分片。

Nginx 源码编译时加入 slice 模块无需额外下载或手动添加代码,因为该模块自 Nginx 1.9.8 起已作为官方内置模块(ngx_http_slice_module)存在,**默认不启用,但源码中已有实现**。只需在编译配置阶段显式启用即可。
确认 Nginx 版本是否支持 slice 模块
运行以下命令检查当前 Nginx 版本:
nginx -v 或 nginx -V(大写 V 可查看编译参数和模块列表)
若版本 ≥ 1.9.8,slice 模块就存在于源码中;若输出中含 --without-http_slice_module,说明上次编译禁用了它——需重新编译启用。
编译时启用 slice 模块
进入 Nginx 源码目录后,在 ./configure 阶段添加 --with-http_slice_module 参数。例如:
./configure \
--prefix=/usr/local/nginx \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_v2_module
注意:
• 不要加 --without-http_slice_module;
• 该模块无依赖项,无需额外库;
• 启用后执行 make && make install 即可。
配置 slice 模块实现大文件分片
模块启用后,需在 nginx.conf 中配置 slice 指令,通常配合 alias 或 root 使用,并搭配 add_header 和 range 支持:
- 在
location块中添加slice 1m;表示每片大小为 1MB(可设为10m、512k等) - 使用
Content-Range头需确保上游响应支持 range,Nginx 默认对静态文件开启 range 支持 - 推荐搭配
add_header Content-Range $slice_range;透传分片范围信息 - 完整示例:
location /files/ {
slice 5m;
alias /data/files/;
add_header Content-Range $slice_range;
add_header Cache-Control "no-cache";
}
访问 /files/large.zip?_s=0(实际无需参数),Nginx 会按 5MB 自动切分并响应对应 Range 数据。
验证 slice 是否生效
发起带 Range 头的请求,观察响应头与内容:
- 用
curl -H "Range: bytes=5242880-10485759" http://localhost/files/test.bin - 响应状态应为
206 Partial Content - 响应头应包含
Content-Range: bytes 5242880-10485759/104857600及Content-Length匹配片长 - 日志中不会新增独立 access log 条目(slice 是内部处理,非子请求)











