#设置一块共享内存区域,可以被各个worker共享
lua_shared_dict my_limit_count_store 100m;
init_by_lua_block {
require "resty.core"
}
server {
listen 81;
server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
# 限流示例
location / {
default_type 'text/html';
access_by_lua_block {
-- 导入模块
local limit_count = require "resty.limit.count"
-- 限流规则: 每分钟3次
local lim, err = limit_count.new("my_limit_count_store", 3, 60)
if not lim then
ngx.log(ngx.ERR, "failed to instantiate a resty.limit.count object: ", err)
return ngx.exit(500)
end
local key = ngx.var.binary_remote_addr
local delay, err = lim:incoming(key, true)
-- 如果请求数在限制范围内,则当前请求被处理的延迟(这种场景下始终为0,因为要么被处理要么被拒绝)和将被处理的请求的剩余数
ngx.log(ngx.ERR,"delay: ",delay," err: ",err)
if not delay then
if err == "rejected" then
ngx.say("访问太频繁了..","delay: ",delay," , err: ",err)
-- return ngx.exit(503)
end
ngx.log(ngx.ERR, "被限流啦...... ", err)
return ngx.exit(500)
end
ngx.say("success")
}
# return 200 "success";
}
}
最后修改于 2022-11-15 18:43:01
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

