温馨提示×

Debian Nginx怎么限流

小樊
41
2026-10-18 06:22:19
栏目: 智能运维

在 Debian 上使用 Nginx 限流,通常是通过 ngx_http_limit_req_module(请求频率限制) 和 ngx_http_limit_conn_module(连接数限制) 来实现。下面按常见场景给你说明。


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

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️⃣ 在站点配置中应用限流

编辑你的站点配置:

sudo nano /etc/nginx/sites-available/default

在 server {} 或 location {} 中使用:

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

参数说明:

  • 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 / {
        limit_conn conn_limit 5;
    }
}

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


三、白名单(放行某些 IP)

geo $limit {
    default 1;
    127.0.0.1 0;
    192.168.1.0/24 0;
}

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

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

四、返回限流状态码(可选)

默认返回 503,可自定义:

limit_req_status 429;

五、常见场景示例

✅ API 接口限流

location /api/ {
    limit_req zone=req_limit burst=10 nodelay;
}

✅ 防止 CC 攻击

limit_req zone=req_limit burst=5 nodelay;
limit_conn conn_limit 3;

六、查看是否生效

tail -f /var/log/nginx/access.log

出现 503 或 429 即被限流。


如果你有 具体业务场景(如:API、登录接口、静态资源、Docker 环境),我可以帮你写一份完整配置。

0 踩