• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

标题有点绕口。我尽量把关键词都贴进去。之前因为自己的nginx安装了ngx_lua模块,但是又需要引入


但是安装luafilesystem又需要先安装luarocks,比较繁琐。这里就想记录一下安装过程。


 


nginx安装ngx_lua模块可以参考:LNMP平滑升级nginx并安装ngx_lua模块教程


 


下面进入正题


 


下载:

wget http://keplerproject.github.io/luarocks/releases/luarocks-2.2.2.tar.gz

解压:
tar -zxvf luarocks-2.2.2.tar.gz

进入目录:
cd luarocks-2.2.2

安装 luarocks


./configure --with-lua="/usr/local" --lua-suffix="jit" --with-lua-include="/usr/local/include/luajit-2.0"  

其中“/usr/local/include/luajit-2.0” 可以 find / -name lua.h 先找下路径


make build
make install 

安装 luafilesystem

luarocks install luafilesystem

因为自己网站526net一直放在国外,速度一直不怎么理想。所以网站前端一直是买一些低配廉价,但是对国内线路友好的机器来做反向代理。 nginx的反向代理可以说已经很好用了,我一直使用proxy_store方式来做缓存,唯一的缺点就是不会自动清理缓存。我是通过定时任务自动删除的。 但是还是做不到我要的效果,前两天使用lua写了脚本,实现客户访问前端,lua判断文件的创建时间,然后根据设定的时间来自动删除缓存。 nginx 的设置我就不多说了,lua的安装可以参考 《LNMP平滑升级nginx并安装ngx_lua模块教程》 《为nginx的luajit安装luarocks并安装luafilesystem》两篇文章 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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua随机数的问题发布时间:2022-07-22
下一篇:
cocos2d-x血泪史(-1)CCNotificationCenter与LUA发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap