ngx_lua 模块API说明

#ngx_lua模块API说明#参考文档:http://wiki.nginx.org/HttpLuaModuleZh#Core_constants ngx_lua官方文档http://blog.csdn.net/imlsz/article/details/42915473  对官方API的主要内容翻译http://jinnianshilongnian.iteye.com/blog/
摘要由CSDN通过智能技术生成

ngx_lua模块API说明

#Ngx指令
lua_code_cache on | off;
作用:打开或关闭 Lua 代码缓存,影响以下指令: set_by_lua_file , content_by_lua_file, rewrite_by_lua_file, access_by_lua_file 及强制加载或者reload Lua 模块等.缓存开启时修改LUA代码需要重启nginx,不开启时则不用。开发阶段一般关闭缓存。
作用域:main, server, location, location if

lua_regex_cache_max_entries 1024;
作用:未知(貌似是限定缓存正则表达式处理结果的最大数量)

lua_package_path .../path... ;
作用:设置用lua代码写的扩展库路径。
例:lua_package_path '/foo/bar/?.lua;/blah/?.lua;;';

lua_package_cpath '/bar/baz/?.so;/blah/blah/?.so;;';
作用:设置C扩展的lua库路径。

set_by_lua $var '<lua-script>' [$arg1 $arg2];
set_by_lua_file $var <path-to-lua-script-file> [$arg1 $arg2 ...];
作用:设置一个Nginx变量,变量值从lua脚本里运算由return返回,可以实现复杂的赋值逻辑;此处是阻塞的,Lua代码要做到非常快.
另外可以将已有的ngx变量当作参数传进Lua脚本里去,由ngx.arg[1],ngx.arg[2]等方式访问。
作用域:main, server, location, server if, location if
处理阶段:rewrite

content_by_lua '<lua script>';
content_by_lua_file luafile;
作用域:location, location if
说明:内容处理器ÿ
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ngx_dynamic_limit_req_module可以结合redis来实现更灵活的限流策略,具体使用方法如下: 1. 安装redis 首先需要安装redis,并启动redis服务。 2. 安装nginxngx_dynamic_limit_req_module模块 安装支持ngx_dynamic_limit_req_module模块nginx版本,并编译安装ngx_dynamic_limit_req_module模块。 3. 配置nginx.conf文件 在nginx.conf文件中添加如下配置: ``` http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { location /api/ { access_by_lua_block { local redis = require "resty.redis" local red = redis:new() red:set_timeout(1000) local ok, err = red:connect("127.0.0.1", 6379) if not ok then ngx.log(ngx.ERR, "failed to connect to redis: ", err) return ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR) end local limit_key = ngx.var.binary_remote_addr .. ngx.var.uri local limit, err = red:incr(limit_key) if not limit then ngx.log(ngx.ERR, "failed to incr limit: ", err) return ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR) end if limit > 5 then ngx.exit(ngx.HTTP_TOO_MANY_REQUESTS) end red:set_keepalive(10000, 100) } proxy_pass http://backend; } } } ``` 其中,`access_by_lua_block`指令用于在nginx处理请求时执行Lua脚本,通过redis实现动态限流。 在Lua脚本中,首先连接redis,然后根据请求的来源IP地址和URI生成限流的key,使用redis的INCR命令递增限流计数器,如果计数器超过限制值,则返回429 Too Many Requests错误。 4. 重启nginx服务 修改完nginx.conf文件后,需要重启nginx服务才能生效。 以上就是ngx_dynamic_limit_req_module结合redis的使用方法,可以根据自己的需求对Lua脚本进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值