--[[
读取限流配置
--]] --获取共享内存
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) > ) do
local s, e = string.find(uri_list, ",")
if e ~= nil then
local str = string.sub(uri_list,,s-)
uri_list = string.sub(uri_list, e+,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) > )
do
local a, b = string.find(data,"\n")
if b ~= nil then
local str = string.sub(data,,a-)
data = string.sub(data,b+,string.len(data))
local a1, b1 = string.find(str, "=")
local str1 = string.sub(str,,a1-)
local str2 = string.sub(str,b1+,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,,a1-)
local str2 = string.sub(data,b1+,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(,fileRead)
--ngx.timer.at(30,fileRead)
end -- 方法执行入口
fileRead()

init_config_file.lua的更多相关文章

  1. jquery常用的选择器

    jquery用选择器来得到jquery对象,进而进行一些操作. 一.基本选择器 1.id选择器.示例:选择id为one的元素 var $one = $("#one"); 2.类选择 ...

  2. lua执行字节码的过程介绍

    前面一篇文章中介绍了lua给下面代码生成最终的字节码的整个过程,这次我们来看看lua vm执行这些字节码的过程. foo = "bar" local a, b = "a& ...

  3. lua 学习笔记(1)

    一.lua函数赋值与函数调用         在lua中函数名也是作为一种变量出现的,即函数和所有其他值一样都是匿名的,当要使用某个函数时,需要将该函数赋值给一个变量,这样在函数块的其他地方就可以通过 ...

  4. 在redis中使用lua脚本让你的灵活性提高5个逼格

    在redis的官网上洋洋洒洒的大概提供了200多个命令,貌似看起来很多,但是这些都是别人预先给你定义好的,但你却不能按照自己的意图进行定制, 所以是不是感觉自己还是有一种被束缚的感觉,有这个感觉就对了 ...

  5. 使用Nginx+Lua代理Hadoop HA

    一.Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个Master组件提供服务,其中正在使用的组件称为Active,另一个作为备份称为Standby,例如HDFS的NameNo ...

  6. 打印Lua的Table对象

    小伙伴们再也不用为打印lua的Table对象而苦恼了, 本人曾也苦恼过,哈哈 不过今天刚完成了这个东西, 以前在网上搜过打印table的脚本,但是都感觉很不理想,于是,自己造轮子了~ 打印的效果,自己 ...

  7. lua解析赋值类型代码的过程

    我们来看看lua vm在解析下面源码并生成bytecode时的整个过程: foo = "bar" local a, b = "a", "b" ...

  8. 怎么调试lua性能

    怎么调试lua性能 我们的游戏使用的是Cocos2dx-lua 3.9的项目,最近发现我们的游戏.运行比较缓慢.想做一次性能优化了.其实主要分为GPU.CPU的分别优化.GPU部分的优化.网上有很多优 ...

  9. Lua 安全调用 metatable 的简单应用

    事情的经过 我们的项目中存在好几个战斗界面,不过界面中的内容略有不同.跟同事出去吃饭的时候,他问我.我们现在的战斗界面.有很多是重复的,但是也有偶尔几个地方不太一样.我在战斗过程中驱动这些界面的时候. ...

随机推荐

  1. Visual assint x(转)

    最新破解版:Visual Assist X 10.8.2001 破解版 支持VC2013及以下版本 安装步骤: 1. 双击运行VA_A_Setup2001并安装 2. 双击运行Visual Assis ...

  2. RabbitMQ的四种ExChange

    在message到达Exchange后,Exchange会根据route规则进入对应的Queue中,message可能进入一个Queue也可能进入对应多个Queue,至于进入哪个Queue或者是说哪个 ...

  3. 设计模式22:Strategy 策略模式(行为型模式)

    Strategy 策略模式(行为型模式) 动机(Motivation) 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂:而且有时候支持 ...

  4. 编写高质量代码改善C#程序的157个建议——建议134:有条件地使用前缀

    建议134:有条件地使用前缀 在.NET的设计规范中,不建议使用前缀.但是,即便是微软自己依然广泛的使用这前缀. 最典型的前缀是m_,这种命名一方面是考虑到历史沿革中的习惯问题,另一方面也许我们确实有 ...

  5. Linux CentOS 7 安装confluence 5.8.10

    一..需要下载的安装包如下 1.atlassian-confluence-5.8.10-x64.bin #confluence安装包 2.confluence5.x-crack.zip #conflu ...

  6. js链式调用

    我们都很熟悉jQuery了,只能jQuery中一种非常牛逼的写法叫链式操作 * $('#div').css('background','#ccc').removeClass('box').stop() ...

  7. 关于提交表单时添加自定义值的方式:data中值可绑定function

    表单提交时新增自定义值: $.ajaxForm(){ data:{aaa:"12"} } 但是这个是在初始化的时候就绑定进去的,所以值是固定的初始化时候的值,若想添加动态值,可以这 ...

  8. 等等,你可能误解nodejs了–通俗的概括nodejs的真相

    最近刚把产品从cpp平台迁移到nodejs平台了.  很多以前关于nodejs的观念被颠覆了. 这里分享出来, 欢迎大家批评指正. "nodejs是做服务器端开发的, 它一定和web相关,几 ...

  9. JS设置localStorage有效期

    localStorage是一个没有时间限制的数据存储,如果没有手动删除它,它将永久保存. 但是有些时候我们又需要它在一段时间后自动删除,这里我们可以对它进行扩展. var date = new Dat ...

  10. AutoCompleteTextView 和 MultiAutoCompleteTextView 自动完成文本控件

    概述 在html中有很多自动完成的应用,例如,百度的搜索,输入一些关键字,下面就会自动列出该关键字对应的一些消息 在Android中也有自动完成文本,这就是AutoCompleteTextVeiw和M ...