標題有點繞口。我盡量把關鍵詞都貼進去。之前因為自己的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