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


    因为自己网站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
    转载请保留本站链接:http://www.526net.com/blog/xitong/658.html
  • 相关阅读:
    HDU 4221 Greedy?(贪心)
    HDU 3400 Line belt (三分法)
    POJ 1026 Cipher(置换)
    POJ 1166 The Clocks(暴搜)
    HDU 4122 Alice's mooncake shop(RMQ,或者单调队列)
    POJ 1721 CARDS(置换)
    POJ 3270 Cow Sorting(置换)
    高斯消元法(模板)
    http://blog.seirsoft.com
    转载 STL容器的erase用法
  • 原文地址:https://www.cnblogs.com/archoncap/p/4953079.html
Copyright © 2020-2023  润新知