在 Debian 上使用 Nginx 限流,通常是通过 ngx_http_limit_req_module(请求频率限制) 和 ngx_http_limit_conn_module(连接数限制) 来实现的。下面按常见场景给你说明。
limit_req_zone:定义限流规则和共享内存limit_req:在 server 或 location 中应用编辑 Nginx 配置(如 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/limit.conf)
http {
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
}
在 server 或 location 中使用:
server {
listen 80;
server_name example.com;
location / {
limit_req zone=req_zone burst=5 nodelay;
proxy_pass http://backend;
}
}
$binary_remote_addr:按客户端 IP 限流10m:共享内存大小rate=1r/s:每秒 1 个请求burst=5:允许突发 5 个请求nodelay:突发请求立即处理(不排队)http {
limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
}
server {
location / {
limit_conn conn_zone 10;
}
}
表示:每个 IP 最多 10 个并发连接
location /api/ {
limit_req zone=req_zone burst=10 nodelay;
}
只对 /api/ 接口限流,不影响静态资源。
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_zone:10m rate=1r/s;
这样白名单 IP 不会被限流。
nginx -t
systemctl reload nginx
$http_x_forwarded_for 代替 $binary_remote_addrburstzone 大小适当增大(如 20m)如果你能说一下:
我可以给你一套直接可用的配置。