前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx利用Lua实现Nginx反向代理proxy_store缓存文件自删除

Nginx利用Lua实现Nginx反向代理proxy_store缓存文件自删除

作者头像
星哥玩云
发布2022-07-13 13:33:55
6000
发布2022-07-13 13:33:55
举报
文章被收录于专栏:开源部署

因为自己网站一直放在国外,速度一直不怎么理想。所以网站前端一直是买一些低配廉价,但是对国内线路友好的机器来做反向代理。nginx的反向代理可以说已经很好用了,我一直使用proxy_store方式来做缓存,唯一的缺点就是不会自动清理缓存。我是通过定时任务自动删除的。但是还是做不到我要的效果,前两天使用lua写了脚本,实现客户访问前端,lua判断文件的创建时间,然后根据设定的时间来自动删除缓存。

nginx 的设置我就不多说了,lua的安装可以参考 《LNMP平滑升级nginx并安装ngx_lua模块教程》  https://www.linuxidc.com/Linux/2018-04/152034.htm

lua代码就很简单了。因为使用了luafilesystem来操作文件。

主要流程是。 用户访问前端完毕的时候,自动执行lua脚本,lua首先根据url来获取缓存文件路径,判断文件是否存在。如果存在获取文件的修改时间, 同时判断修改时间和缓存过期时间是否一致,一致的话删除缓存文件。下次用户访问会自动从源服务器抓回新的数据。 这个方式我测试了3天,没大问题。终于抛弃了定时整站删除的无奈了。

下面贴下主要代码: 1> 判断文件是否存在  很简单只需要 open一下就行了 function file_exists(path)   local file = io.open(path, "rb")   if file then file:close() end   return file ~= nil end 2> 对时间的操作,计算过期时间。 local function getNewDate(srcDateTime,interval) local ofset=0 ofset = 60 * interval local newTime = os.date("*t", srcDateTime + tonumber(ofset)) return os.time(newTime) end 3> 程序主体流程,代码是最初版的,我用的已经改造为数组循环判断 local getfile=ngx.var.document_root..ngx.var.uri local matchtime = 10 local matchstr = 10 if file_exists(getfile) then local lfs = require"lfs" local new_att = assert (lfs.attributes(getfile)) local oldTime=new_att.change if(string.match(ngx.var.uri,matchstr)) then local newTime=getNewDate(oldTime,matchtime) if os.time()>newTime then os.remove(getfile) end end end

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档