OpenResty实现自定义粒度的文件缓存

nginx默认的proxy_cache模块支持自定的proxy_cache_key,通过OpenResty对内部变量cache_key赋值可以实现更复杂的缓存规则。

proxy_cache_path  /data/nginx/cache  levels=1:2  keys_zone=files:10m  inactive=2h  max_size=100g;

server {
    listen        80;
    server_name   name;

    location /files {
        set $cache_key '';
        content_by_lua_block {
            local uri = ngx.var.uri
            local m = ngx.re.match(ngx.var.uri, [[files/(\S+)?/]], "o")
            if m then
               ngx.var.cache_key = m[1]
               ngx.exec("@cache")
            end
        }
    }

    location @cache {
        proxy_pass             http://源站IP;
        proxy_set_header       Host xxx;
        proxy_cache            files;
        proxy_cache_key        $cache_key;
        proxy_cache_valid      200 7d;
    }
}

至此已经可以实现一个任意key的请求缓存,这只是一个简单的缓存系统。

如果要达到CDN的标准还有几个问题要解决:1、需要更好的支持Range回源,2、支持合并回源。

添加新评论