宝塔默认Nginx未启用limit_conn_module,需先编译安装该模块;再于http块顶层配置limit_conn_zone,server或location块中用limit_conn调用,并设limit_conn_status 503抑制日志刷屏。

limit_conn 模块在宝塔默认 Nginx 中是**不启用的**,直接写配置会报错 unknown directive "limit_conn_zone"。必须先确认并启用模块,再分层配置(http 块定义 zone,server 或 location 块调用),否则规则完全不生效。
确认 Nginx 是否已编译 http_limit_conn_module
SSH 登录服务器,执行:nginx -V 2>&1 | grep -o with-http_limit_conn_module
如果无输出,说明模块缺失——宝塔安装时未勾选该模块,不能跳过这步直接配。
- 模块缺失时,必须进「软件商店 → Nginx → 设置 → 编译安装」,勾选
http_limit_conn_module并重新编译;编译过程约 3–8 分钟,期间网站会短暂中断 - 不要依赖“重载配置”来绕过模块检查:Nginx 启动时就会拒绝含未知指令的配置,导致服务无法启动
limit_conn_zone 必须放在 http 块顶层,不能写在站点配置里
宝塔「网站 → 配置文件」只允许编辑 server 块内容,但 limit_conn_zone 是全局指令,必须出现在 http 块内、所有 include 语句之前。
- 正确路径:「软件商店 → Nginx → 设置 → 配置修改」,找到
http { ... }区域,在include行上方插入:limit_conn_zone $binary_remote_addr zone=perip:10m; -
perip是自定义 zone 名,后续limit_conn必须严格一致;10m表示该 zone 最多存约 16 万个 IP 的连接状态(足够中小站点) - CDN 用户注意:若用了 Cloudflare 等 CDN,
$binary_remote_addr拿到的是 CDN 节点 IP,不是真实访客 IP;需先配置real_ip指令还原真实 IP,否则限流对象完全错误
在站点配置中启用 limit_conn 并避免日志刷屏
回到具体站点的「配置文件」,在 server 或某个 location 块里添加限流规则:
- 示例(限制根路径下每个 IP 最多 5 个并发连接):
limit_conn perip 5;limit_conn_status 503; -
limit_conn_status 503很关键:不加这行,被限流请求默认返回 503 且每秒刷几十条错误日志到error.log,可能撑爆磁盘 - 不要把
limit_conn放在location /static/这类静态资源路径下就以为能防下载器——恶意工具会伪造多个 User-Agent 或换 IP 轮询,单靠连接数限制效果有限;建议搭配limit_req控制请求频率 - 数值设定要合理:设成 1–2 容易误伤移动端(一个页面常带多个并发请求);设成 20+ 基本失去防护意义;推荐从 5–10 开始压测观察
limit_conn_status 的日志抑制。没做这两项,要么限错了对象,要么服务器磁盘半夜被日志写满。


















