range request in nginx reverse proxy
nginx proxy_cache 模式下是否支持range, 取决于源站是否返回了: Accept-Range Header
在源站没有明确支持range的请求下, 即便nginx cache 了整个文件, 也不会响应任何range 请求, 会返回整个文件
这个行为方式可以通过 修改proxy_force_range on;来修改
Syntax: | proxy_force_ranges on | off; |
---|---|
Default: | proxy_force_ranges off; |
Context: | http , server , location |
This directive appeared in version 1.7.7.
Enables byte-range support for both cached and uncached responses from the proxied server regardless of the “Accept-Ranges” field in these responses.
nginx 有个特殊的模块叫做http_slice_module, 可以支持分片回源
比如如下配置, 会以1M为文件块跟源站回源, 并存成多份1M分割的cache
slice 1m;
proxy_cache_key $host$uri$slice_range;
proxy_set_header Range $slice_range;
proxy_http_version 1.1;
proxy_cache_valid 200 206 300m;
从测试看, 即便开启了proxy_force_range on和slice range 回源, 在源站没有明确返回Accept-Range的情况下, nginx 依然不会使用slice range回源, 保持了良好的适配性
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_force_ranges