阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

147次阅读
没有评论

共计 1157 个字符,预计需要花费 3 分钟才能阅读完成。

因为自己网站一直放在国外,速度一直不怎么理想。所以网站前端一直是买一些低配廉价,但是对国内线路友好的机器来做反向代理。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

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计1157字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中