Nginx请求限制:Linux-Tutorial中的limit_req与limit_conn配置

Nginx请求限制:Linux-Tutorial中的limit_req与limit_conn配置

【免费下载链接】Linux-Tutorial Linux-Tutorial是一个Linux系统教程,适合用于学习和掌握Linux命令行操作和系统管理技能。特点:内容详细、实例丰富、适合入门。 【免费下载链接】Linux-Tutorial 项目地址: https://gitcode.com/gh_mirrors/li/Linux-Tutorial

为什么需要请求限制

在高并发场景下,服务器经常面临恶意请求、爬虫攻击或突发流量导致的过载问题。Nginx提供两种核心限流机制:请求速率限制(limit_req)和并发连接限制(limit_conn),可有效保护后端服务稳定性。项目中Nginx安装和配置文档已涵盖基础防护配置,本文将深入解析这两种限流策略的具体实现。

认识limit_req与limit_conn

特性limit_reqlimit_conn
限制对象单位时间内请求频率同一IP的并发连接数
实现模块ngx_http_limit_req_modulengx_http_limit_conn_module
典型应用防CC攻击、API调用频率控制限制单用户资源占用
配置层级http、server、locationhttp、server、location

limit_req配置实战

基础配置示例

在http块定义限流规则,限制单IP每秒5个请求:

http {
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s;
    
    server {
        location /api/ {
            limit_req zone=req_limit burst=10 nodelay;
            proxy_pass http://backend_server;
        }
    }
}
  • zone=req_limit:10m:创建10MB内存区域存储IP请求记录
  • rate=5r/s:限制速率为每秒5个请求
  • burst=10:允许10个请求排队等待
  • nodelay:超出速率的请求立即返回503,不延迟处理

结合监控模块验证

配置Nginx监控模块后,通过http://127.0.0.1/nginx_status查看限流效果:

Active connections: 23
server accepts handled requests
 1024 1024 3072
Reading: 0 Writing: 5 Waiting: 18

Active connections突增时,若requests增长平缓,说明限流规则生效。

limit_conn配置实战

基础配置示例

限制单IP同时最多10个连接:

http {
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    
    server {
        location /download/ {
            limit_conn conn_limit 10;
            limit_rate 100k;  # 额外限制单连接带宽
            alias /data/downloads/;
        }
    }
}
  • limit_conn conn_limit 10:限制单个IP并发连接数为10
  • limit_rate 100k:限制每个连接的下载速度为100KB/s

多维度限制

对不同资源设置差异化限制:

http {
    limit_conn_zone $binary_remote_addr zone=per_ip:10m;
    limit_conn_zone $server_name zone=per_server:10m;
    
    server {
        limit_conn per_ip 5;       # 单IP并发5连接
        limit_conn per_server 100; # 服务器总并发100连接
    }
}

高级限流策略

结合地理位置限制

通过Nginx变量实现区域限流:

http {
    geo $limit {
        default 1;
        192.168.0.0/24 0;  # 内网IP不限制
    }
    
    map $limit $limit_key {
        0 "";
        1 $binary_remote_addr;
    }
    
    limit_req_zone $limit_key zone=req_limit:10m rate=5r/s;
}

与SSL配置协同

在HTTPS环境下,限流配置需放在443端口server块:

server {
    listen 443 ssl;
    ssl_certificate /path/cert.crt;
    ssl_certificate_key /path/private.key;
    
    location / {
        limit_req zone=req_limit burst=5;
        # 其他SSL配置...
    }
}

SSL配置示例

配置文件参考

项目中Nginx前端配置模板可作为限流配置基础,建议在location /api/等接口路径添加限流规则。完整配置可参考:

测试与验证

使用ab工具测试限流效果:

ab -n 100 -c 20 http://your_server/api/

当并发数超过burst值时,部分请求将返回503状态码,通过查看Nginx访问日志确认限流触发情况。

总结与最佳实践

  1. 分层配置:在http层定义通用规则,server/location层精细化调整
  2. 合理设置burst:建议设为rate值的2-3倍,兼顾用户体验与系统保护
  3. 监控联动:结合Nginx状态监控与日志分析调整参数
  4. 备份策略:突发流量时可临时调整rate值,通过nginx -s reload热加载配置

通过本文配置,可有效防范恶意请求与流量波动,保障服务稳定运行。更多Nginx高级配置可参考项目官方文档

【免费下载链接】Linux-Tutorial Linux-Tutorial是一个Linux系统教程,适合用于学习和掌握Linux命令行操作和系统管理技能。特点:内容详细、实例丰富、适合入门。 【免费下载链接】Linux-Tutorial 项目地址: https://gitcode.com/gh_mirrors/li/Linux-Tutorial

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值