插件窝 干货文章 nginx限速怎么实现

nginx限速怎么实现

limit 限速 zone 限制 999    来源:    2025-04-24

Nginx限速实现方法

Nginx提供了几种限速机制,可以根据不同需求选择合适的方式。以下是主要的限速实现方法:

1. 限制连接速率(limit_req模块)

使用limit_req_zonelimit_req指令实现请求速率限制:

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

    server {
        location / {
            limit_req zone=one burst=20;
            # 其他配置...
        }
    }
}
  • zone=one:10m:创建名为"one"的共享内存区,大小为10MB
  • rate=10r/s:限制每秒10个请求
  • burst=20:允许突发20个请求

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

限制单个IP的并发连接数:

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

    server {
        location / {
            limit_conn addr 5;
            # 其他配置...
        }
    }
}
  • zone=addr:10m:创建名为"addr"的共享内存区
  • limit_conn addr 5:每个IP最多5个并发连接

3. 限制带宽(limit_rate)

限制单个连接的下载速度:

location /download/ {
    limit_rate 50k;  # 限制为50KB/s
    # 或者根据条件动态设置
    limit_rate_after 500k;  # 下载500KB后开始限速
    limit_rate 100k;        # 限速为100KB/s
}

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;
        }

        location /download/ {
            # 大文件下载限速
            limit_rate_after 1m;
            limit_rate 50k;
        }
    }
}

5. 白名单设置

可以为特定IP或网段设置不限速:

geo $limit {
    default 1;
    10.0.0.0/8 0;
    192.168.0.0/24 0;
}

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

limit_req_zone $limit_key zone=req_limit:10m rate=5r/s;

server {
    location / {
        limit_req zone=req_limit burst=10;
    }
}

注意事项

  1. 限速配置会影响性能,需要根据服务器资源合理设置
  2. 共享内存区大小(如10m)需要根据预期访问量调整
  3. 生产环境建议先进行测试,观察效果后再调整参数
  4. 可以结合Nginx日志分析限速效果

以上方法可以单独或组合使用,根据实际业务需求选择合适的限速策略。