如何使用 Nginx 限制特定 IP 的访问频率,防止恶意攻击?(Nginx IP访问频率限制教程)

Nginx 提供了多种方式来限制 IP 的访问频率,有效地防止 DDoS 攻击、爬虫或滥用。下面介绍几种常见的方法来实现这一目标:

方法一:使用 limit_req 模块

Nginx 的 limit_req 模块允许你根据请求速率限制客户端的请求数量。这是最常用的限制频率手段。

  1. 配置 limit_req_zone

    首先,在全局或 server block 级别声明一个速率限制区域:

    http {
        limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s; # 每秒限速 1 个请求,使用 10MB 内存存储计数器
    }
    
  2. 应用到 location

    在 location 块中应用限制:

    location / {
        limit_req zone=mylimit burst=5 nodelay; # 爆发请求不超过 5,立即拒绝
    }
    

    这样设置后,每个 IP 每秒最多发送一个请求,超出后会被临时拒绝。

方法二:使用 limit_conn 模块

如果只是简单地限制每个 IP 同时打开的连接数,则可以使用 limit_conn 模块:

http {
    limit_conn_zone $remote_addr zone=perip:10m; # 每个 IP 用 10MB 内存
}

server {
    ...
    limit_conn perip 10; # 每个 IP 同时允许 10 个连接
}

方法三:使用第三方模块 ngx_http_geoip_module

如果你希望基于地理位置或其他条件限制访问,可以使用 ngx_http_geoip_module 模块,但这需要安装 GeoIP 数据库。

  1. 下载并编译 Nginx 包含该模块
  2. 下载 GeoIP 数据库
  3. 配置限制
    geo $mycountry {
        default 0;
        country US jp 1; # 允许美国和日本的 IP
    }
    
    server {
        if ($mycountry != 1) {
            return 444; # 如果不在白名单国家,则返回 444
        }
    }
    

方法四:使用 ngx_http_access_module

如果你想创建黑名单或白名单,可以直接使用 allow 和 deny 命令:

location / {
    deny 192.168.1.1; # 黑名单
    allow 192.168.1.2; # 白名单
    deny all; # 默认拒绝所有其他 IP
}

小贴士

  • 监控日志:经常检查访问日志,寻找异常模式,更新黑名单或调整限速阈值。
  • 测试设置:在上线前,使用工具如 ab 或 wrk 对新配置进行压力测试,确保设置不影响正常服务。
  • 合法性检查:确保你的限制措施符合法律要求,尤其是涉及数据保护和隐私法。

通过以上方法,你可以有效地防止恶意攻击和滥用,保护 Nginx 服务器免受大量无效请求的影响。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 qiqicto@qq.com 举报,一经查实,本站将立刻删除。
赞 (0)
赵其鑫的头像赵其鑫管理团队

相关推荐

返回顶部