lua-limit 介绍
lua-limit 是一个 OpenRestry Lua 限流工具,支持令牌桶限流、cookie 限流、日期范围限流、概率限流。
1. 思路
限流脚本的设计思路源于规则链,用户请求进入 Nginx
后,请求会进入限流脚本配置的限流链,在链中的规则中逐个匹配处理,如果某条限流规则匹配此请求,那么将跳出规则链执行循环,返回被限流信息,除非此规则明确说明需要参考链中下一条规则。
2. 流控工具使用
需要编写限流脚本,脚本可以参考如下(some_business_limit.lua):
local conf = { redis = {...} some_limit_rule_1 = {...} some_limit_rule_2 = {...} } -- 如果不传 conf 那么会在 package.path 中寻找 -- limit_conf.lua 文件 local limit = require "limit":new(conf) funciton some_who_1(limit) return true, "some_limit_rule_1" end function some_who_2(limit) local redis = limit:get_redis() -- some_redis_operation -- target find if is_target then return true, "some_limit_rule_2" else return false end end function some_message(limit, data) -- 返回页面 limit.send_redirect("limit.html") -- 返回json limit.send_redirect("xxx.html", data) end limit:who({some_who_1, some_who_2}):execute()
在 Nginx 的 http 块中配置 package.path 是的 lua 解释器可以找到脚本文件,在需要限流的 location 部分增加
access_by_lua_file指定 lua 脚本(当然也可以使用content_by_lua),如:
http { lua_package_path "/some_place/limit/limit-common/?.lua;;"; server { location /some_url { access_by_lua_file /some_place/some_business_limit.lua; } } }
lua-limit 官网
https://gitee.com/mahaixing/lua-limit
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。