在 Debian 上使用 Nginx 限流,通常是通过 ngx_http_limit_req_module(请求频率限制) 和 ngx_http_limit_conn_module(连接数限制) 来实现。下面按常见场景给你说明。
编辑 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 个请求编辑你的站点配置:
sudo nano /etc/nginx/sites-available/default
在 server {} 或 location {} 中使用:
server {
location /api/ {
limit_req zone=req_limit burst=20 nodelay;
}
}
参数说明:
burst=20:允许突发 20 个请求nodelay:突发请求立即处理(否则排队)sudo nginx -t
sudo systemctl reload nginx
在 http {} 中:
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
location / {
limit_conn conn_limit 5;
}
}
表示:每个 IP 最多 5 个并发连接。
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;
location /api/ {
limit_req zone=req_limit burst=10 nodelay;
}
limit_req zone=req_limit burst=5 nodelay;
limit_conn conn_limit 3;
tail -f /var/log/nginx/access.log
出现 503 或 429 即被限流。
如果你有 具体业务场景(如:API、登录接口、静态资源、Docker 环境),我可以帮你写一份完整配置。