Nginx 用分片提示缓存效率基于range协议

107

slice 模块

Syntax:slice size;
Default: slice 0;

Context:httpserverlocation

功能:通过range协议将大文件分解多个小文件,更好的用缓存为客户端的range协议服务

模块:--with-http_slice_module

location / {
    slice             1m;
    proxy_cache       cache;
    proxy_cache_key   $uri$is_args$args$slice_range;
    proxy_set_header  Range $slice_range;
    proxy_cache_valid 200 206 1h;
    proxy_pass        http://localhost:8000;
}

 下游服务器代码示列

 server {
        listen       8080;
        server_name  shop**.com.cn;
        location / {

        root html;
                proxy_cache two;
                proxy_cache_valid 200 206 1m;
                proxy_pass http://192.168.0.51:8012; #代理到上游服务器
        }
}

上游服务器代码示列  在html里有个大文件

server {
                listen 8012;
                default_type text/plain;
                root html;
              
                location / {

                }
}

请求示列

curl -r 10000-10010 http://shop**.com.cn:8080/step -I //-r 表示启用range

返回示列

HTTP/1.1 206 Partial Content
Server: openresty/1.13.6.2
Date: Fri, 15 Mar 2019 10:07:02 GMT
Content-Type: text/plain
Content-Length: 11 #获取的实际数量 因为 10000-10010 长度是11
Connection: keep-alive
Last-Modified: Fri, 08 Mar 2019 02:13:42 GMT
Vary: Accept-Encoding
ETag: "5c81cfd6-281c558"
Content-Range: bytes 10000-10010/42059096 #这里会看到总量与取量

 但是有个问题,如果用户并发请求缓存的话会影响性能 一般用多线程并且使用range协议的话

 proxy_cache_path data/tmpcache levels=2:2 keys_zone=two:10m loader_threshold=300
                     loader_files=200 max_size=200m inactive=1m;
  server {
        listen       8080;
        server_name  shop**.com.cn;
        location / {

        root html;
                slice 1m;
                proxy_cache_key $uri$is_args$args$slice_range;
                proxy_set_header Range $slice_range; #这里必须要加range协议到头部 而且需要加范围值
                proxy_cache two;
                proxy_cache_valid 200 206 1m;
                proxy_pass http://192.168.0.51:8012;
    }
}

猜你喜欢

转载自www.cnblogs.com/jackey2015/p/10518305.html