温馨提示×

debian nginx如何限流

小樊
35
2026-10-27 00:49:13
栏目: 智能运维

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


一、请求频率限流(limit_req)

1. 修改 Nginx 配置

一般编辑:

sudo nano /etc/nginx/nginx.conf

或站点配置:

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

2. 定义限流区域(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 个请求

3. 在 server 或 location 中启用

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

参数说明:

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

4. 测试并重载

sudo nginx -t
sudo systemctl reload nginx

二、并发连接限流(limit_conn)

1. 定义连接限制区(http 块)

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

2. 在 server 或 location 中使用

server {
    location / {
        limit_conn conn_limit 5;
    }
}

含义:
单个 IP 最多 5 个并发连接


三、针对特定 IP 或路径限流

只限制 API 接口

location /api/ {
    limit_req zone=req_limit burst=5;
}

白名单(不限流)

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

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

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

四、返回限流状态码

默认返回 503,可自定义:

limit_req_status 429;

五、查看是否生效

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

限流时会看到 503 或 429


六、常见建议值

  • 普通网站:rate=5r/s burst=10
  • API 接口:rate=10r/s burst=20
  • 管理后台:更严格

如果你有 具体场景(如 WordPress、API、CC 攻击防护),我可以给你一份可直接用的配置。

0 踩