init_config_file.lua

--[[
读取限流配置
--]]

--获取共享内存
local limit_req_store = ngx.shared.limit_req_store
--初始化拒绝 URI 列表
reject_uri_tab = {}

-- 重新初始化拒绝 URI 列表
local function resetRejectUri(uri_list)
    if uri_list ~= nil then
        reject_uri_tab = {}
        while (string.len(uri_list) > 0) do
            local s, e = string.find(uri_list, ",")
            if e ~= nil then
                local str = string.sub(uri_list,1,s-1)
                uri_list = string.sub(uri_list, e+1,string.len(uri_list))
        reject_uri_tab["rejected"..str]="rejected"
      else
        reject_uri_tab["rejected"..uri_list]="rejected"
        break
      end
        end
    for key, value in pairs(reject_uri_tab) do
      ngx.log(ngx.DEBUG, "nginx limit module reject uri :",key)
    end
    end
end

-- 设置共享内存
local function setSharedDict(data)
    while (string.len(data) > 1)
    do
        local a, b = string.find(data,"
")
        if b ~= nil then
            local str = string.sub(data,1,a-1)
            data = string.sub(data,b+1,string.len(data))
            local a1, b1 = string.find(str, "=")
            local str1 = string.sub(str,1,a1-1)
            local str2 = string.sub(str,b1+1,string.len(str))
            ngx.log(ngx.DEBUG,"limit config property: ",str1, " = ",str2)
            limit_req_store:set(str1,str2)
        else
            local a1, b1 = string.find(data,"=")
            local str1 = string.sub(data,1,a1-1)
            local str2 = string.sub(data,b1+1,string.len(data))
            ngx.log(ngx.DEBUG,"limit config property: ",str1, " = ",str2)
            limit_req_store:set(str1,str2)
            ngx.log(ngx.DEBUG, "nginx request limit initialize file has been successful read.")
            break
        end
    end
    resetRejectUri(limit_req_store:get("reject_uri_list"))
end


-- 读限流配置文件
local function fileRead()
    local file = io.open("/wls/appsystems/conf/lua-module/overload_protect_config.txt","r")
    --local file = io.open("/Users/zuodejun595/work/openresty-lua-project/nginx_limit_req/overload_protect_config.txt","r")
    if file == nil then
        ngx.log(ngx.ERR, "nginx request limit initialize file not exist.")
        return
    end
    local data = file:read("*a") --从当前位置读取整个文件。例:file.read("*a")
    ngx.log(ngx.DEBUG, "read file result:", data)
    file:close()
    setSharedDict(data)

    --过载保护策略总开关,若开关关闭,则全部策略失效
    --[[
    local overload_protection_switch = limit_req_store:get("overload_protection_switch")
    if (overload_protection_switch ~= nil and overload_protection_switch == "N") then
            ngx.log(ngx.ERR, "nginx request limit strategy has shutdown.")
        return
    end
    --]]

    ngx.log(ngx.INFO,"nginx request limit module will read config file after 5 seconds.")
    ngx.timer.at(5,fileRead)
    --ngx.timer.at(30,fileRead)
end

-- 方法执行入口
fileRead()
原文地址:https://www.cnblogs.com/koushr/p/5873406.html