limit_conn是Nginx限制同一IP或key并发连接数的机制,专防CC攻击中的海量短连接,不干预复用连接的高频请求,需配合limit_req及真实IP提取等措施协同防护。

限制连接速率(limit_conn)是 Nginx 中防止恶意流量压垮服务器最直接有效的手段之一。它不是限制带宽或请求频率,而是控制**同一 IP 或 key 能建立多少并发连接**,特别适合应对 CC 攻击中大量短连接、频繁建连的场景。
明确 limit_conn 的作用边界
它只管“连接数”,不管“请求内容”或“响应大小”。比如一个 IP 同时打开 100 个 TCP 连接但还没发 HTTP 请求,limit_conn 就会触发拦截;而同一个 IP 每秒发 100 个请求但都复用一个连接,它则完全不干预——这时候得靠 limit_req 配合。
核心配置步骤(Nginx 环境)
- 在
http块中定义连接限制区域:limit_conn_zone $binary_remote_addr zone=conn_per_ip:10m;
(按客户端 IP 限制,10MB 内存约可存储 16 万个 IP 记录) - 在
server或location块中启用限制:limit_conn conn_per_ip 10;
(每个 IP 最多保持 10 个并发连接) - 可选:设置触发限流后的响应行为:
limit_conn_log_level error;limit_conn_status 503;
实际部署要注意的关键细节
单纯设个数字容易误伤正常用户,尤其在 NAT 环境(如公司出口、校园网)下多个用户共享一个公网 IP:
- 若业务含长连接(如 WebSocket、SSE),
limit_conn值需略高于最大预期并发连接数,避免主动断连 - 对登录页、API 接口等高敏感路径,建议单独配置更严格的连接限制(如
limit_conn conn_per_ip 3;) - 配合
limit_req使用效果更佳:先用limit_conn拦住海量建连,再用limit_req控制单 IP 每秒请求数 - 日志中留意
limiting connections by zone字段,确认规则是否生效,也便于定位异常 IP 段
它不能替代但必须协同的其他措施
limit_conn 是第一道闸门,但不是万能盾:
- 无法识别伪造 IP(X-Forwarded-For 可被篡改),需前置 CDN 或反向代理做真实 IP 提取
- 对慢速攻击(Slowloris)防护有限,这类攻击靠极低速发送数据维持连接,需结合超时参数(
client_header_timeout、keepalive_timeout)收紧 - 不处理已建立连接内的恶意 payload,仍需 WAF 或应用层校验



















