安裝redisnginx
下載redis
wget http://download.redis.io/releases/ redis-5.0-rc4.tar.gzjson
解壓安裝配置cookie
make, sudo make installui
運行redislua
配置文件:redis.conf能夠編輯相關內容,默認端口是6379url
啓動redisspa
切換到 redis解壓的目錄的src下面執行 ./redis-server & 使其後臺運行rest
一、對應的nginx.conf配置以下,須要在http模塊中添加以下配置,否則在redis.lua中引入的包會報找不到對應的引用錯誤。日誌
http { lua_package_path "/usr/local/openresty/nginx/conf/waf/?.lua;/usr/local/openresty/lualib/resty/?.lua;;"; lua_package_cpath "/usr/local/openresty/lualib/?.so;;"; lua_shared_dict limit 10m; init_by_lua_file /usr/local/openresty/nginx/conf/waf/init.lua; access_by_lua_file /usr/local/openresty/nginx/conf/waf/waf.lua; ......其餘省略......... }
二、nginx_lua 如何鏈接redis,對應的lua腳本(redis.lua)以下。
local cjson = require "cjson" local redis = require "resty.redis" -- 是否須要開啓redis的日誌 attackredislog = "on" --log存儲目錄,該目錄須要用戶本身新建,切須要用戶的可寫權限 logdir = "/usr/local/openresty/nginx/logs/hack/" function redislog(method,data) if attackredislog then local servername=ngx.var.server_name line = ""..method.." \""..data.."\" \n" local filename = logdir..'/'..servername.."_"..ngx.today().."_redis.log" write(filename,line) end end function write(logfile,msg) local fd = io.open(logfile,"ab") if fd == nil then return end fd:write(msg) fd:flush() fd:close() end -------------------------------------------------------- local function close_redis(red) if not red then return end --釋放鏈接(鏈接池實現) local pool_max_idle_time = 10000 --毫秒 local pool_size = 100 --鏈接池大小 local ok, err = red:set_keepalive(pool_max_idle_time, pool_size) if not ok then redislog("redis keepalive","set redis keepalive error,"..err.."") end end local red = redis:new() red:set_timeout(1000) local ip = "127.0.0.1" local port = 6379 local ok, err = red:connect(ip,port) if not ok then return close_redis(red) end function setRedis(key, val) local ok, err = red:set(key, val) -- 設置值的有效期爲60秒 ok, err = red:expire(key,60) if not ok then redislog("redis set","failed to set "..key..","..err.."") return end end function getRedis(key) local res, err = red:get(key) if not res then redislog("redis get","failed to get,"..err.." ") return end if res == ngx.null then redislog("redis get"," "..key.." not found") return nil else return res end end local ck = ngx.var.http_cookie local scheme = ngx.var.scheme local server_name = ngx.var.server_name local request_uri = ngx.var.request_uri local server_port = ngx.var.server_port local url = scheme.."://"..server_name..":"..server_port..request_uri local value if (ck ~= nil) then value = getRedis(ck) end close_redis(red)