温馨提示×

debian nginx如何限速

小樊
45
2026-09-09 13:34:56
栏目: 智能运维

在 Debian 上使用 Nginx 进行限速,通常是通过 limit_req(限制请求频率)和 limit_conn(限制并发连接数)模块来实现。下面按常见场景给你讲清楚。


一、Nginx 限速常用方式

1️⃣ 限制请求速率(最常用)

模块:ngx_http_limit_req_module

示例:每个 IP 每秒最多 1 个请求

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

    server {
        location / {
            limit_req zone=req_limit burst=5 nodelay;
        }
    }
}

参数说明:

  • $binary_remote_addr:按客户端 IP 限速
  • zone=req_limit:10m:共享内存区,10MB
  • rate=1r/s:每秒 1 个请求
  • burst=5:允许突发 5 个请求
  • nodelay:突发请求不延迟(立即处理)

✅ 适合:防刷接口、防爬


2️⃣ 限制并发连接数

模块:ngx_http_limit_conn_module

示例:每个 IP 最多 10 个连接

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

    server {
        location / {
            limit_conn conn_limit 10;
        }
    }
}

✅ 适合:防止下载工具、CC 攻击


3️⃣ 限制下载/上传速度(带宽限速)

模块:ngx_http_core_module

示例:限制响应速度为 100KB/s

location /download/ {
    limit_rate 100k;
}

或按连接数动态限速:

limit_rate_after 1m;
limit_rate 50k;

✅ 适合:文件下载、视频


二、Debian 上的配置位置

主配置文件

/etc/nginx/nginx.conf

站点配置

/etc/nginx/sites-available/default
/etc/nginx/conf.d/*.conf

修改后:

nginx -t
systemctl reload nginx

三、完整示例(API 限速)

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

    server {
        listen 80;
        server_name example.com;

        location /api/ {
            limit_req zone=api_limit burst=10 nodelay;
            proxy_pass http://127.0.0.1:8080;
        }
    }
}

四、常见坑

❌ 限速不生效?

  • 确认 Nginx 编译带模块(Debian 官方包默认带)
  • limit_req_zone 必须写在 http {}
  • 反向代理时注意 $binary_remote_addr 是否被覆盖

❌ CDN / 负载均衡?

  • real_ip 模块获取真实 IP

五、进阶(可选)

  • 白名单(allow / deny)
  • 按 User-Agent 限速
  • 返回 429 而不是丢弃请求

如果你能说一下:

  • 接口 / 下载 / 网站整体
  • 想限 请求数 / 连接数 / 带宽

我可以给你一份精准配置

0