在 Debian 上使用 Nginx 进行限速,通常是通过 limit_req(限制请求频率)和 limit_conn(限制并发连接数)模块来实现。下面按常见场景给你讲清楚。
模块:ngx_http_limit_req_module
http {
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=1r/s;
server {
location / {
limit_req zone=req_limit burst=5 nodelay;
}
}
}
参数说明:
$binary_remote_addr:按客户端 IP 限速zone=req_limit:10m:共享内存区,10MBrate=1r/s:每秒 1 个请求burst=5:允许突发 5 个请求nodelay:突发请求不延迟(立即处理)✅ 适合:防刷接口、防爬
模块:ngx_http_limit_conn_module
http {
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
location / {
limit_conn conn_limit 10;
}
}
}
✅ 适合:防止下载工具、CC 攻击
模块:ngx_http_core_module
location /download/ {
limit_rate 100k;
}
或按连接数动态限速:
limit_rate_after 1m;
limit_rate 50k;
✅ 适合:文件下载、视频
/etc/nginx/nginx.conf
/etc/nginx/sites-available/default
/etc/nginx/conf.d/*.conf
修改后:
nginx -t
systemctl reload nginx
http {
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;
server {
listen 80;
server_name example.com;
location /api/ {
limit_req zone=api_limit burst=10 nodelay;
proxy_pass http://127.0.0.1:8080;
}
}
}
❌ 限速不生效?
limit_req_zone 必须写在 http {}$binary_remote_addr 是否被覆盖❌ CDN / 负载均衡?
real_ip 模块获取真实 IP如果你能说一下:
我可以给你一份精准配置。