登录
首页 >  文章 >  php教程

宝塔面板限流设置教程:Nginx并发控制防资源耗尽

时间:2026-03-27 16:06:36 188浏览 收藏

本文深入解析了宝塔面板下网站并发限流的完整技术链条,强调Nginx连接数(worker_connections)、PHP-FPM进程数(pm.max_children)与系统文件描述符限制(ulimit -n)三者必须协同配置,缺一不可——否则限流形同虚设;同时厘清了“网站级并发限制”(基于limit_conn/limit_req,控制活跃TCP连接数)与“单IP请求速率限制”(基于limit_req_zone,防CC攻击)的本质区别,并给出静态站、WordPress等场景的实操建议值、内存导向的max_children计算方法、worker_connections调优要点及ulimit生效步骤,还揭示了常见误区(如混淆并发数与QPS、忽视WAF联动防CC),并提供ab压测验证方式,助你真正筑牢高并发下的服务稳定性防线。

宝塔面板如何限制并发数_配置Nginx限流防止资源耗尽

网站级并发限制:在宝塔界面直接设单站最大连接数

宝塔对单个网站的并发控制,本质是 Nginx 的 limit_conn + limit_req 组合封装,它不改全局配置,适合临时压测或突发流量隔离。

  • 路径:【网站】→ 找到站点 → 【设置】→ 【流量限制】→ 勾选【开启流量限制】→ 填写【并发限制】数值
  • 这个值代表“同一时刻允许多少个 TCP 连接处于 active 状态”,不是每秒请求数(QPS),也不是 IP 数量;设为 50 并不意味每秒只能处理 50 次请求,而是最多 50 个连接同时挂着(比如长轮询、慢接口、上传中)
  • 容易踩的坑:并发限制单IP限制 是两个独立开关,别误以为开了前者就自动限 IP;若没开 单IP限制,恶意脚本仍可用 100 个不同 IP 打满你设的 50 并发
  • 建议值参考:静态站可设 80–120,WordPress 类动态站建议 40–80,低于 30 可能导致正常用户刷新失败(尤其启用 WP Rocket 或缓存插件后首屏加载变慢)

PHP 层并发上限:调 max_children 防 FPM 进程打满

网站并发数再高,最终要落到 PHP-FPM 能 fork 出多少子进程来执行脚本。这个值设低了,请求会排队进 pm.status_path 队列,出现 504 Gateway Timeout;设高了又可能吃光内存,触发 OOM killer 杀进程。

  • 路径:【软件管理】→ 找到 PHP 版本 → 【设置】→ 【性能调整】→ 修改【最大并发数】(即 pm.max_children
  • 计算依据不是 CPU 核心数,而是内存:每个 PHP 进程平均占 20–40MB(取决于扩展和程序),8GB 内存服务器保守建议 ≤ 120,16GB 可设到 200–250
  • 注意:该值必须 ≤ pm.start_servers × 2,否则启动时会报 WARNING: pm.start_servers is not set 类警告;宝塔默认 start_servers 是 5,所以别一上来就把 max_children 设成 300
  • 改完务必点【提交】,宝塔会自动 reload php-fpm,但不会重启 MySQL 或 Nginx —— 若你同时调了数据库连接池,得手动检查是否匹配

Nginx worker 级连接总容量:改 worker_connections 才算真正扩容

前面两步都是“应用层限流”,而 worker_connections 是 Nginx 自身能维持的最大并发连接总数,是整个服务的天花板。不调它,就算网站和 PHP 都放开,Nginx 也会在 accept() failed (24: Too many open files) 报错后拒绝新连接。

  • 路径:【软件管理】→ Nginx → 【设置】→ 【配置修改】→ 在 events { ... } 区块内添加或修改:worker_connections 4096;use epoll;
  • 总连接上限 = worker_processes × worker_connections;宝塔默认 worker_processes auto;(通常等于 CPU 核心数),所以 4 核机器配 4096 就是约 1.6 万连接
  • 别盲目拉高 worker_connections:超过 8192 后需同步调大系统 fs.file-max 和用户级 ulimit -n,否则 Nginx 启动时会静默降级回默认值(如 1024),且无任何提示
  • Linux 默认 ulimit -n 是 1024,宝塔【安全】→【防火墙】→【高级设置】→【系统命令】里执行:echo "* soft nofile 65535" >> /etc/security/limits.conf && echo "* hard nofile 65535" >> /etc/security/limits.conf,然后重连 SSH 生效

防 CC 攻击的并发联动:单 IP 限流不能只靠面板默认值

宝塔的【单IP限制】看着简单,但它背后是 Nginx 的 limit_req_zone,单位是“请求速率”(r/s),不是并发数。很多人填了 10,结果发现攻击者用 10 个线程每秒刷 10 次,照样打满你后端。

  • 【单IP限制】填的数字,是“每秒最多允许多少个请求通过”,不是“总共最多 10 个连接”。若填 5,攻击者用 curl -s -o /dev/null -w "%{http_code}\n" -H "User-Agent: test" http://yoursite.com & 重复 20 次,照样能压出 20 QPS
  • 真正防 CC 要配合 WAF:宝塔专业版的【网站防火墙】→【防 CC 攻击】里勾选后,它会在 Nginx 配置里插入 limit_req zone=ccburst burst=20 nodelay; 这类规则,比纯面板设置更可控
  • 别信“并发 300 很高”的说法:真实业务中,一个含 3 张图 + 1 个 JS + 1 个 CSS 的首页,用户打开就产生 6–8 个并发请求;300 并发 ≈ 同时在线 40–50 人,小电商或企业站真可能达到
  • 验证是否生效:用 ab -n 1000 -c 200 http://yoursite.com/ 测试,再看 Nginx 错误日志里有没有大量 limiting requests, excess: X.XX 记录

宝塔把很多底层参数做了图形化封装,但并发这事,worker_connectionspm.max_childrenulimit -n 这三个值必须协同调整,漏掉任何一个,都可能让前面所有设置变成无效装饰。

以上就是《宝塔面板限流设置教程:Nginx并发控制防资源耗尽》的详细内容,更多关于的资料请关注golang学习网公众号!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>