需在Nginx的http、server或location块中配置limit_conn_status指令,且必须与limit_conn配合使用,默认返回503,可设为429、403等合法状态码,自1.3.15起支持,须确保limit_conn_zone已定义。

要配置 limit_conn_status 自定义并发连接超限时返回的状态码,需在 Nginx 的 http、server 或 location 块中设置该指令,并确保它与 limit_conn 配合使用。默认返回 503,但你可以改成 429、403 或其他合法的 HTTP 状态码。
确认 Nginx 版本支持
该指令自 Nginx 1.3.15 起可用。运行以下命令检查版本:
nginx -v若低于 1.3.15,请先升级 Nginx。
正确配置 limit_conn_status
该指令必须出现在启用连接限制的上下文中,且要在 limit_conn 指令之后或同级生效范围内。常见写法如下:
- 在
http块中全局设置(影响所有 server):
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn_status 429;
server {
location /api/ {
limit_conn addr 10;
}
}
}
- 在
server或location块中局部覆盖(优先级更高):
limit_conn addr 3;
limit_conn_status 403;
}
注意:limit_conn_status 本身不触发限流,它只是指定“当 limit_conn 触发拒绝时返回什么状态码”。
验证配置是否生效
修改后重载配置:
nginx -t && nginx -s reload用工具(如 curl 或 ab)发起超过限制的并发请求,观察响应头中的状态码:
若返回 HTTP/1.1 429 Too Many Requests(或你设定的其他码),说明配置成功。Nginx 不会自动添加 Retry-After 头,如需,需配合 add_header 手动添加。
常见问题提醒
- 状态码必须是标准 HTTP 状态码(如 403、429、444、503),不能是自定义非标值(如 601);
- 若同时使用
limit_req(限速),其超限状态由limit_req_status控制,与limit_conn_status无关; - 返回 444 时,Nginx 会直接关闭连接,不发任何响应体,适合静默拒绝;
- 确保
limit_conn_zone已正确定义,否则limit_conn不生效,limit_conn_status也不会被触发。


















