插件窝 干货文章 如何实现Nginx的限速配置

如何实现Nginx的限速配置

limit 限速 zone 限制 502    来源:    2025-04-10

Nginx限速配置实现指南

Nginx提供了多种限速方式,可以有效控制客户端请求速率,防止服务器过载或被恶意攻击。以下是几种常见的Nginx限速配置方法:

1. 基本请求速率限制(limit_req模块)

http {
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

    server {
        location /api/ {
            limit_req zone=mylimit burst=20 nodelay;
            proxy_pass http://backend;
        }
    }
}
  • limit_req_zone 定义限速区域

    • $binary_remote_addr 使用客户端IP作为识别键
    • zone=mylimit:10m 创建名为mylimit的共享内存区,大小10MB
    • rate=10r/s 限制每秒10个请求
  • limit_req 应用限速规则

    • burst=20 允许突发20个请求
    • nodelay 对突发请求不延迟处理

2. 连接数限制(limit_conn模块)

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    server {
        location /download/ {
            limit_conn addr 5;
            # 其他配置...
        }
    }
}
  • limit_conn_zone 定义连接限制区域
  • limit_conn addr 5 限制每个IP最多5个并发连接

3. 带宽限制(limit_rate)

location /download/ {
    limit_rate 500k;  # 限制每个连接带宽为500KB/s
    limit_rate_after 10m;  # 前10MB不限速
}

4. 组合限速配置

http {
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s;
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

    server {
        location /api/ {
            limit_req zone=req_limit burst=10 nodelay;
            limit_conn conn_limit 10;
            limit_rate 100k;
            # 其他配置...
        }
    }
}

5. 针对特定条件的限速

map $slow $limit {
    1     $binary_remote_addr;
    0     "";
}

limit_req_zone $limit zone=slow:10m rate=10r/s;

server {
    location / {
        # 根据条件设置$slow变量
        set $slow 0;
        if ($http_user_agent ~* "Googlebot|bingbot") {
            set $slow 1;
        }

        limit_req zone=slow burst=5 nodelay;
    }
}

注意事项

  1. 测试环境验证后再应用到生产环境
  2. 根据实际业务需求调整限速参数
  3. 监控限速效果和服务器性能
  4. 对于API可以考虑返回429状态码(Too Many Requests)
  5. 大型部署应考虑分布式限速方案

以上配置可以根据实际需求组合使用,实现精细化的流量控制策略。