最近公司有个 purge(根据用户请求创建、删除缓存目录)的需求,基于 nginx 上做二次开发,但是之前一直在搞 “nginx-rtmp” 直播这块,在缓存方面完全就是小白。不过经过一段时间调研以后,结合代码、日志看了一些牛人针对 nginx cache 做的总结,感觉现在有点入门了,但涉及的东西还是比较多的,所以想着把这些博客的链接整合一下,以后好复习。同时希望帮助那些想搞 nginx 和 cache 的朋友快速找到解决问题的资料。
清除缓存设计与实现
nginx-purge 按目录清除缓存 设计思想很值得借鉴,因为第三方模块仅实现了清除缓存文件,不包括目录
nginx-purge 第三方模块代码 加载模块后按作者给的配置示例进行配置,结合 wget 和 curl 命令就可以测试删除单个缓存文件了,下面给出了配置示例。
上游服务器配置:
server {
listen 80;
server_name localhost;
location ~ \.js {
expires 1h;
root js/;
}
}
代理服务器配置:
proxy_cache_path /tmp/cache/127.0.0.1/ levels=1:2 keys_zone=127.0.0.1:10m;
server {
listen 8000;
location /test {
proxy_pass http://127.0.0.1/jquery.js;
proxy_cache $host;
proxy_cache_key $uri$is_args$args;
proxy_cache_purge PURGE from 127.0.0.1;
expires 30d;
}
}
purge功能测试:
/* 给代理服务发送GET请求,代理服务器向上游服务器获取内容缓至本地磁盘 */
wget -d -S -e http-proxy=127.0.0.1:8000 http://127.0.0.1/test -O /dev/null
/* 通过 purge 请求删除代理服务器缓存的文件 */
curl -v -X PURGE "http://127.0.0.1:8000/test"
upstream 系列
因为cache的实现要基于 proxy 和 upstream 这两个模块,需求和业务又是相辅相成的,为了让自己不偏离需求、心里有点底,不得不恶补一下 upsteram机制的实现,的确很复杂,但是中间有一些设计思想非常值得借鉴,例如:上下游的交互、 http header 的处理 设计的非常巧妙,代码很简洁.
cache 系列
这哥们在 cache 界算的上资深,站在更高的角度让你认识 cache 系统,更多的是思想上的碰撞,不局限于代码。从提出问题过度到业务场景,再过度到实现细节,读起来没那么乏味,我很期待作者的后续更新.
nginx-cache 系列
nginx-cache 代码分析(一)针对后端静态文件的缓存,配置和 ngx_http_proxy_module 相关,需要使用 upstream 机制来向后端获取内容并缓存成文件,这个分析比较重要,代码实现和purge需求相关
nginx-cache 代码分析(二) 针对静态文件的缓存,配置和 ngx_http_core_module 相关