当前位置: 首页 > news >正文

兰州西固区网站建设平台昆明有几个区

兰州西固区网站建设平台,昆明有几个区,wordpress 仿主题下载,php面向对象网站开发需求#xff1a;在Nginx上实现一个动态拦截IP的方法#xff0c;具体是当某个IP在1分钟内访问超过60次时#xff0c;将其加入Redis并拦截#xff0c;拦截时间默认1天。 技术选型#xff1a;使用NginxLuaRedis的方法。这种方案通过Lua脚本在Nginx处理请求时检查Redis中的黑…需求在Nginx上实现一个动态拦截IP的方法具体是当某个IP在1分钟内访问超过60次时将其加入Redis并拦截拦截时间默认1天。 技术选型使用NginxLuaRedis的方法。这种方案通过Lua脚本在Nginx处理请求时检查Redis中的黑名单同时统计访问频率超过阈值就封禁。这应该符合用户的需求。 需要结合Lua脚本和Redis的计数功能。安装OpenResty配置Nginx的Lua模块编写Lua脚本统计访问次数使用Redis存储和过期键以及设置拦截逻辑。连接池的使用避免频繁连接Redis影响性能。 一、环境准备 安装OpenResty OpenResty集成了Nginx和Lua模块支持直接运行Lua脚本 # Ubuntu/Debian sudo apt-get install openresty # CentOS yum install openresty 安装Redis服务 sudo apt-get install redis-server # Debian系 sudo yum install redis # RedHat系 二、Nginx配置 主配置文件nginx.conf 在http块中添加共享内存和Lua脚本路径 http {lua_package_path /usr/local/openresty/lualib/?.lua;;;lua_shared_dict ip_limit 10m; # 共享内存区server {listen 80;server_name _;location / {access_by_lua_file /usr/local/lua/ip_block.lua; # 核心拦截脚本root /var/www/html;}} } 三、Lua脚本实现动态拦截 脚本路径 创建Lua脚本/usr/local/lua/ip_block.lua 脚本内容 local redis require resty.redis local red redis:new()-- Redis连接参数 local redis_host 127.0.0.1 local redis_port 6379 local redis_timeout 1000 -- 毫秒 local redis_auth nil -- 无密码留空-- 拦截参数 local block_time 86400 -- 封禁时间1天 local time_window 60 -- 统计窗口1分钟 local max_requests 60 -- 最大请求数-- 获取客户端IP local function get_client_ip()local headers ngx.req.get_headers()return headers[X-Real-IP] or headers[x_forwarded_for] or ngx.var.remote_addr end-- 连接Redis local function connect_redis()red:set_timeout(redis_timeout)local ok, err red:connect(redis_host, redis_port)if not ok thenngx.log(ngx.ERR, Redis连接失败: , err)return nilendif redis_auth thenlocal ok, err red:auth(redis_auth)if not ok then ngx.log(ngx.ERR, Redis认证失败: , err) endendreturn ok end-- 主逻辑 local client_ip get_client_ip() local counter_key limit:count: .. client_ip local block_key limit:block: .. client_ip-- 检查是否已封禁 local is_blocked, err red:get(block_key) if tonumber(is_blocked) 1 thenngx.exit(ngx.HTTP_FORBIDDEN) -- 直接返回403 end-- 统计请求次数 connect_redis() local current_count red:incr(counter_key) if current_count 1 thenred:expire(counter_key, time_window) -- 首次设置过期时间 end-- 触发封禁条件 if current_count max_requests thenred:setex(block_key, block_time, 1) -- 封禁并设置1天过期red:del(counter_key) -- 删除计数器ngx.exit(ngx.HTTP_FORBIDDEN) end-- 释放Redis连接 red:set_keepalive(10000, 100) 四、性能优化 Redis连接池 通过set_keepalive复用连接避免频繁建立TCP连接 共享内存缓存 使用lua_shared_dict缓存高频访问IP减少Redis查询压力 异步日志记录 封禁操作异步写入日志文件避免阻塞请求处理 ngx.timer.at(0, function()local log_msg string.format(%s - IP %s blocked at %s, ngx.var.host, client_ip, ngx.localtime())local log_file io.open(/var/log/nginx/blocked_ips.log, a)log_file:write(log_msg, \n)log_file:close() end) 五、验证与测试 手动触发封禁 # 模拟高频请求 ab -n 100 -c 10 http://your-domain.com/ # 检查Redis redis-cli keys limit:block:* 自动解封验证 等待24小时后检查封禁IP是否自动删除 redis-cli ttl limit:block:1.2.3.4 # 返回剩余秒数 六、扩展方案 分布式封禁 在多台Nginx服务器间共享Redis黑名单实现集群级拦截 可视化监控 通过GrafanaPrometheus展示实时拦截数据 # 采集Redis指标 prometheus-redis-exporter --redis.addresslocalhost:6379 动态调整阈值 通过Redis Hash存储不同路径的拦截规则 local rule_key limit:rule: .. ngx.var.uri local custom_rule red:hget(rule_key, max_requests) 引用说明 核心拦截逻辑参考了NginxLuaRedis的经典架构设计 Redis键过期机制确保自动解封性能优化方案借鉴了OpenResty最佳实践
http://www.w-s-a.com/news/102061/

相关文章:

  • 站群搭建移动端处理器天梯图
  • 岳池发展建设集团有限公司门户网站湛江seo咨询
  • 手机网站工具关键词排名是什么意思
  • 游民星空是谁做的网站沈阳网站托管公司
  • 做网站搭建需要什么人vs2017移动网站开发
  • 购物网站开发需要什么技术怎么查看网站是否备案
  • 学做电商那个网站好网站建设投票主题
  • 中卫网站推广网络营销毕业设计做网站大小有什么要求
  • 做问卷网站义乌网站建设推广专家
  • 不会编程怎样建设网站昆明做网站哪家
  • 直播网站模板新营销平台电商网站
  • 建设部指定招标网站免费的企业查询软件
  • 做前端常用的网站及软件下载平台优化是什么意思
  • 企石镇仿做网站wordpress 网站白屏
  • 班级网站建设规划书专业定制网红变色杯
  • 上海网站设计公司电话甘肃路桥建设集团有限公司官方网站
  • 哈尔滨网站建设网站开发陕西省建设监理工程协会网站
  • 微信公众号电商网站开发wordpress增加论坛
  • 网站建设视频百度网盘下载免费wordpress搭建
  • 哈尔滨市网站建设公司汕头市公司网站建设平台
  • 东莞网站建设方案外包甘肃两学一做网站
  • 网站建设优化排名推广平面设计职业学校
  • 网后台的网站怎么做网站代理商
  • 网站如何转移到新的空间服务器上手机无人区离线地图app
  • 网站建设模板的买域名做网站的坏处
  • 长春做网站qianceyun做景观素材有哪几个网站
  • 自己建的网站也要注册域名吗邯郸市做网站
  • 天津网站建设制作软件潍坊个人做网站
  • 重庆城市建设集团官方网站php用什么做网站服务器
  • 深圳坪山站重庆市园林建设有限公司网站