在 Debian 上用 nginx 限流,通常使用的是 nginx 自带的限流模块:
ngx_http_limit_req_module(请求频率限流)ngx_http_limit_conn_module(并发连接数限流)下面按常见场景说明,示例基于 Debian(如 Debian 11/12)。
Debian 官方 nginx 包默认已包含:
nginx -V 2>&1 | grep -o limit_req
nginx -V 2>&1 | grep -o limit_conn
只要能看到相关模块名即可。
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 个请求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:突发请求立即处理(不加则排队)sudo nginx -t
sudo systemctl reload nginx
http {
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
}
server {
location /download/ {
limit_conn conn_limit 5;
}
}
表示:每个 IP 最多 5 个并发连接。
server {
limit_req zone=req_limit burst=10;
limit_conn conn_limit 3;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
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 | - |
如果你愿意,我可以: