????????range请求允许服务器只发送请求的一部分响应数据给客户端,通常对大文件传输时,用以实现断点续传、多线程下载等功能。若服务端响应信息头中包含字段 Accept-Ranges:bytes,则表示服务端支持范围请求,且节点范围的单位为字节(bytes)。
????????在 Nginx 缓存默认配置下,Nginx 处理完一个大文件的初始请求后,后续的用户请求必须等待整个文件下载结束并存入缓存后才可以继续被处理,整个过程非常耗时。为解决这个问题,Nginx 提供了 ngx_http_slice_module 模块,用以缓存范围请求的支持。该模块将文件分成更小的切片(slices),客户端每个范围请求覆盖特定的切片,如果该范围没有缓存,则从源服务器请求后存入缓存,否则就从缓存中返回数据。
????????http_slice 模块配置指令如下表所示。
Syntax:?? ?slice size;
Default:?? ?slice 0;
Context:?? ?http, server, location
Syntax:?? ?max_ranges number;
Default:?? ?—
Context:?? ?http, server, location
This directive appeared in version 1.1.2.?
????????配置样例如下:
location / {
slice 1m; # 切片大小为1MB
proxy_cache cache; # 缓存共享内存名称为cache
proxy_cache_key $uri$is_args$args$slice_range; # 设置缓存key
proxy_set_header Range $slice_range; # 添加头字段Range的字段值为
# $slice_range
proxy_cache_valid 200 206 1h; # 响应状态码为200及206的内容缓存有效期为1h
proxy_pass http://localhost:8000;
}