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) > ) 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的更多相关文章
- jquery常用的选择器
jquery用选择器来得到jquery对象,进而进行一些操作. 一.基本选择器 1.id选择器.示例:选择id为one的元素 var $one = $("#one"); 2.类选择 ...
- lua执行字节码的过程介绍
前面一篇文章中介绍了lua给下面代码生成最终的字节码的整个过程,这次我们来看看lua vm执行这些字节码的过程. foo = "bar" local a, b = "a& ...
- lua 学习笔记(1)
一.lua函数赋值与函数调用 在lua中函数名也是作为一种变量出现的,即函数和所有其他值一样都是匿名的,当要使用某个函数时,需要将该函数赋值给一个变量,这样在函数块的其他地方就可以通过 ...
- 在redis中使用lua脚本让你的灵活性提高5个逼格
在redis的官网上洋洋洒洒的大概提供了200多个命令,貌似看起来很多,但是这些都是别人预先给你定义好的,但你却不能按照自己的意图进行定制, 所以是不是感觉自己还是有一种被束缚的感觉,有这个感觉就对了 ...
- 使用Nginx+Lua代理Hadoop HA
一.Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个Master组件提供服务,其中正在使用的组件称为Active,另一个作为备份称为Standby,例如HDFS的NameNo ...
- 打印Lua的Table对象
小伙伴们再也不用为打印lua的Table对象而苦恼了, 本人曾也苦恼过,哈哈 不过今天刚完成了这个东西, 以前在网上搜过打印table的脚本,但是都感觉很不理想,于是,自己造轮子了~ 打印的效果,自己 ...
- lua解析赋值类型代码的过程
我们来看看lua vm在解析下面源码并生成bytecode时的整个过程: foo = "bar" local a, b = "a", "b" ...
- 怎么调试lua性能
怎么调试lua性能 我们的游戏使用的是Cocos2dx-lua 3.9的项目,最近发现我们的游戏.运行比较缓慢.想做一次性能优化了.其实主要分为GPU.CPU的分别优化.GPU部分的优化.网上有很多优 ...
- Lua 安全调用 metatable 的简单应用
事情的经过 我们的项目中存在好几个战斗界面,不过界面中的内容略有不同.跟同事出去吃饭的时候,他问我.我们现在的战斗界面.有很多是重复的,但是也有偶尔几个地方不太一样.我在战斗过程中驱动这些界面的时候. ...
随机推荐
- Spring框架总结(十二)
问题引入: 程序的“事务控制”, 可以用aop实现! 即只需要写一次,运行时候动态植入到业务方法上. 一个业务的成功: 调用的service是执行成功的,意味着service中调用的所有的d ...
- document--文档中的操作,操作属性、操作样式、操作元素
---恢复内容开始--- document操作: 1.找元素 getE.. 2.操作内容 非表单:innerHtml 表单:value 3.操作属性 ...
- JS 前端构建工具gulpjs的使用介绍及技巧
gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速 ...
- Linux Crontab 任务管理工具命令以及示例
Crontab 是 Linux 平台下的一款用于循环执行例行任务的工具,Linux 系统由 cron (crond) 这个系统服务来控制任务 , Linux系统本来就有很多的计划任务需要启动 , 所以 ...
- 洛谷P2147[SDOI2008]洞穴勘测(lct)
题目描述 辉辉热衷于洞穴勘测. 某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假 ...
- 移动距离——第六届蓝桥杯C语言B组(省赛)第八题
原创 问题描述: 移动距离 X星球居民小区的楼房全是一样的,并且按矩阵样式排列.其楼房的编号为1,2,3...当排满一行时,从下一行相邻的楼往反方向排号.比如:当小区排号宽度为6时,开始情形如下: ...
- 安装了IntelliJ IDEA中文输入法光标不跟随处理办法
安装了IntelliJ IDEA 2017.2.3版本发现搜狗输入法中文输入的时候光标不跟随,而且存在卡屏的现象,网上找了很多办法试了之后都不管用.最后在这里找到了解决方案,亲测可用! 首先,将IDE ...
- java 调用javascript
首先我们在D盘的根目录下有一个js文件 名叫 common.js 假设里面有一个这样的方法 /** * @param int * _number 你想要的最大值 * @param ...
- 疑难杂症--单回话下 WITH(NOLOCK)返回更多数据
场景:某DBA在一个人操作数据库时发现,可提交读事务隔离级别下返回的数据少于未提交读事务隔离级别,确认没有其他事务修改数据. 解决方案1: 将数据查询放入一个新建的表,使用该表查询发现问题被消除. ...
- 使用Razor视图引擎来生成邮件内容
邮件的内容其实是就HTML,传统的做法都是通过在程序中拼接字符串来生成邮件的内容,生成困难,维护也困难.Razor是MVC里面使用的视图引擎,用来生成HTML非常方便,ZKEACMS中就是使用了Raz ...