龙空技术网

nginx+lua站点防止ip刷新数据处理

拓拔三郎 200

前言:

而今朋友们对“nginx登陆过期”都比较关怀,兄弟们都需要剖析一些“nginx登陆过期”的相关资讯。那么小编同时在网摘上搜集了一些有关“nginx登陆过期””的相关文章,希望各位老铁们能喜欢,各位老铁们快快来学习一下吧!

1. nginx + lua 安装

参考:[]() (官网)

2.ngix,lua相关配置:

1.nginx.conf 配置调整

a.添加lua相关模块:

lua_package_path ‘/usr/local/nginx-1.12.1/conf/lualib/?.lua;;’;

lua_package_cpath ‘/usr/local/nginx-1.12.1/conf/lualib/?.so;;’;

b.添加缓存

lua_shared_dict lua_cache 128m;

c.添加lua过滤文件(需要过滤的location 配置)

rewrite_by_lua_file /usr/local/nginx-1.12.1/conf/limit_ip.lua;

2.limit_ip.lua 逻辑

a.用户登录(属于正常用户)

local is_login= get_user_cookie(mem_ip,mem_port)

if is_login ~= 0 then --=0 ck为空,其他状态 mem操作异常,或者ck存在 返回正常

return

end

b.白名单过滤

local is_ua_ok = white_ua_check()

— white ua ok return

if is_ua_ok == 1 then

return 1

end

c.连接redis,当前请求ip频率逻辑处理

– 连接redis

local redis = require(‘resty.redis’)

local red = redis.new()

red:set_timeout(1000)

local ok, err = red:connect(redis_ip,redis_port)

if not ok then

return close_redis(red)

end

local lua_limits_key = “visitpolicy:xxxx’:’…clientIP…”:limits"

local limits_times,err1 = red:incr(lua_limits_key) – 存在设置自增

if limits_times == 1 then --ip不存在

red:expire(lua_limits_key,3600) --过期时间

return close_redis(red)

else

if limits_times and tonumber(limits_times) >= forbidden_times then – --ip超过 403

ngx.exit(403)

else --正常范围

close_redis(red)

3.相关测试数据(ab压测)

标签: #nginx登陆过期