温馨提示×

nginx在debian怎样限流

小樊
45
2026-10-03 14:22:49
栏目: 智能运维

在 Debian 上用 nginx 限流,通常使用的是 nginx 自带的限流模块:

  • ngx_http_limit_req_module(请求频率限流)
  • ngx_http_limit_conn_module(并发连接数限流)

下面按常见场景说明,示例基于 Debian(如 Debian 11/12)。


一、确认 nginx 已带限流模块

Debian 官方 nginx 包默认已包含:

nginx -V 2>&1 | grep -o limit_req
nginx -V 2>&1 | grep -o limit_conn

只要能看到相关模块名即可。


二、请求频率限流(最常用)

1️⃣ 在 http 块中定义限流区

编辑 nginx 主配置:

sudo nano /etc/nginx/nginx.conf

在 http {} 内添加:

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

说明:

  • $binary_remote_addr:按客户端 IP 限流
  • zone=req_limit:10m:共享内存区
  • rate=10r/s:每秒最多 10 个请求

2️⃣ 在 server 或 location 中使用

server {
    listen 80;
    server_name example.com;

    location / {
        limit_req zone=req_limit burst=20 nodelay;
        proxy_pass http://backend;
    }
}

参数说明:

  • burst=20:允许突发 20 个请求
  • nodelay:突发请求立即处理(不加则排队)

3️⃣ 重新加载 nginx

sudo nginx -t
sudo systemctl reload nginx

三、并发连接数限流

1️⃣ 定义连接限制区

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

2️⃣ 使用连接限制

server {
    location /download/ {
        limit_conn conn_limit 5;
    }
}

表示:每个 IP 最多 5 个并发连接。


四、针对整个 server 限流(示例)

server {
    limit_req zone=req_limit burst=10;
    limit_conn conn_limit 3;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

五、白名单(不限制某些 IP)

http {
    geo $limit {
        default 1;
        10.0.0.0/8 0;
        192.168.1.100 0;
    }

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

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

这样白名单 IP 不受限。


六、查看是否被限流

nginx 访问日志中:

GET / HTTP/1.1" 503

或被限流时返回:

  • 503 Service Temporarily Unavailable

可在 limit_req 中自定义:

limit_req_status 429;

七、常见建议值(参考)

场景 rate burst
普通网站 5–20 r/s 10–50
API 1–10 r/s 5–20
下载 并发 1–5 -

如果你愿意,我可以:

  • 给你一份 完整 nginx 配置示例
  • 教你 配合 fail2ban 防刷
  • 或针对 API / WordPress / 登录接口 做限流方案

0 踩