#设置一块共享内存区域,可以被各个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
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇