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

个人备案网站有什么限制国内免费ip地址

个人备案网站有什么限制,国内免费ip地址,珠海网站建设 金蝶,网站设计开发文档模板下载需求:在Nginx上实现一个动态拦截IP的方法,具体是当某个IP在1分钟内访问超过60次时,将其加入Redis并拦截,拦截时间默认1天。 技术选型:使用NginxLuaRedis的方法。这种方案通过Lua脚本在Nginx处理请求时检查Redis中的黑…

需求:在Nginx上实现一个动态拦截IP的方法,具体是当某个IP在1分钟内访问超过60次时,将其加入Redis并拦截,拦截时间默认1天。

技术选型:使用Nginx+Lua+Redis的方法。这种方案通过Lua脚本在Nginx处理请求时检查Redis中的黑名单,同时统计访问频率,超过阈值就封禁。这应该符合用户的需求。

需要结合Lua脚本和Redis的计数功能。安装OpenResty,配置Nginx的Lua模块,编写Lua脚本统计访问次数,使用Redis存储和过期键,以及设置拦截逻辑。连接池的使用,避免频繁连接Redis影响性能。

一、环境准备

  1. 安装OpenResty
    OpenResty集成了Nginx和Lua模块,支持直接运行Lua脚本:

    # Ubuntu/Debian
    sudo apt-get install openresty
    # CentOS
    yum install openresty
  2. 安装Redis服务

    sudo apt-get install redis-server  # Debian系
    sudo yum install redis             # RedHat系

二、Nginx配置

  1. 主配置文件(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脚本实现动态拦截

  1. 脚本路径
    创建Lua脚本:/usr/local/lua/ip_block.lua

  2. 脚本内容

    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)

四、性能优化

  1. Redis连接池
    通过set_keepalive复用连接,避免频繁建立TCP连接

  • 共享内存缓存
    使用lua_shared_dict缓存高频访问IP,减少Redis查询压力

  1. 异步日志记录
    封禁操作异步写入日志文件,避免阻塞请求处理:

    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)

五、验证与测试

  1. 手动触发封禁

    # 模拟高频请求
    ab -n 100 -c 10 http://your-domain.com/
    # 检查Redis
    redis-cli keys "limit:block:*"
  2. 自动解封验证
    等待24小时后检查封禁IP是否自动删除:

    redis-cli ttl "limit:block:1.2.3.4"  # 返回剩余秒数

六、扩展方案

  1. 分布式封禁
    在多台Nginx服务器间共享Redis黑名单,实现集群级拦截

  1. 可视化监控
    通过Grafana+Prometheus展示实时拦截数据:

    # 采集Redis指标
    prometheus-redis-exporter --redis.address=localhost:6379
  2. 动态调整阈值
    通过Redis Hash存储不同路径的拦截规则:

    local rule_key = "limit:rule:" .. ngx.var.uri
    local custom_rule = red:hget(rule_key, "max_requests")

引用说明

  • 核心拦截逻辑参考了Nginx+Lua+Redis的经典架构设计
  • Redis键过期机制确保自动解封
  • 性能优化方案借鉴了OpenResty最佳实践
http://www.shuangfujiaoyu.com/news/61276.html

相关文章:

  • 仿做网站要多少钱网络营销和传统营销的区别有哪些
  • 门户网站建设的必要性百度快速收录接口
  • 普通网站服务器电商网站设计模板
  • 网络架构模拟器网站推广优化设计方案
  • 安徽网站优化好不好长沙做优化的公司
  • 西宁网站开发公司网络广告营销典型案例
  • 视频网站app怎么做的深圳网络推广专员
  • 深圳网站开发哪个好百度学术论文查重免费
  • 厂房网络推广平台重庆seo整站优化系统
  • 慈溪做网站公司哪家好北京网讯百度科技有限公司
  • 网站新闻专题怎么做网络营销推广策略有哪些
  • 做网站开发要装什么软件有什么好的推广平台
  • 先锋设计网站如何搭建网站
  • 网站优化建设上海seo专业术语
  • wordpress网站后台要怎么登陆磁力宅在线搜种子
  • 有什么做视频的素材网站好看的网页设计作品
  • 网站如何做水晶按钮域名服务器ip地址查询
  • 织梦装修设计网站模板百度提交网站的入口地址
  • 网站空间购买多钱咖啡的营销推广软文
  • 男男sm怎么做视频网站微信小程序开发多少钱
  • 推荐西安优秀的响应式网站建设公司北京seo营销公司
  • 连云港网站建设开发百度人工客服在线咨询电话
  • 个人定制网站湖南靠谱seo优化
  • 网站建设全教程百度软件安装
  • adobe 网站制作软件有哪些自己怎么开发app软件
  • 定西谁做网站百度注册页面
  • 平湖模板网站建设公司今天热搜前十名
  • 有什么好的网站做推广的怎么优化自己公司的网站
  • 河南手机网站建设公司排名成都新站软件快速排名
  • 聊天系统源码苏州百度 seo