多站点共用一台服务器的性能隔离,关键不在硬件多贵,而在把「PHP-FPM 进程池、MySQL 库与账号、站点目录权限」这三层按站点拆开——拆开之后,一个站被刷爆只会拖慢自己,不会连带拖垮全机。宝塔面板里这三层都能做,只是默认没帮你做。
多站点共服务器,最先要隔离什么?
结论:优先级是 PHP-FPM 进程池 > MySQL 连接与账号 > 磁盘与上传目录,前两层决定「一个站倒下会不会连带别人」。
宝塔默认按「PHP 版本」跑 php-fpm 服务,同一版本下的所有站点共用同一个 www 池。这意味着 A 站被爬虫刷满,池里的 worker 被占光,B 站请求就得排队——这是最常见的「一挂全挂」。
做法:面板若有站点级「独立进程池」开关就直接开;没有就手动加池文件。以 PHP 7.4 为例,在 /www/server/php/74/etc/php-fpm.d/ 下新建 siteA.conf,写 [siteA]、listen = /tmp/php-cgi-siteA.sock,然后把该站 Nginx 配置里的 fastcgi_pass 指向这个 socket,/etc/init.d/php-fpm-74 reload 生效。每个站一个 socket,互不抢 worker。
PHP-FPM 进程池参数怎么按内存算?
结论:pm.max_children 的总和不要超过「可用内存 ÷ 单进程占用」,PHP 7.4/8.x 单进程常驻按 40-60MB 估。
以 8G 内存、跑 5 个站为例:留 2G 给 MySQL、1G 给系统和 Nginx,剩 5G 给 PHP,按 50MB 算总共约 100 个 worker。按站点权重分配:主站 pm.max_children = 40,两个中等站各 20,两个小站各 8,合计 96,留一点余量。
pm 模式上,流量稳定的站用 static(不用反复 fork,稳),波动大的用 dynamic 并配 pm.start_servers、pm.min_spare_servers、pm.max_spare_servers。另外每个池都加上 pm.max_requests = 500,worker 处理满 500 个请求后自动重启,能压掉第三方代码的内存泄漏。
MySQL 怎么做到站点级隔离?
结论:一站一库一账号,并给账号设 max_user_connections,避免单站把连接数吃满。
宝塔「数据库」里给每个站建独立库和独立用户,不要多个站共用一个 root 或同一个库账号。建好后执行 ALTER USER 'siteA'@'localhost' WITH MAX_USER_CONNECTIONS 20;,单站最多 20 条连接,撑死了也只会占掉 max_connections 的一部分。
再把慢查询打开:long_query_time = 2、slow_query_log = ON,哪个站拖慢数据库一看慢日志就知道。数据库升级或结构变更前先 mysqldump 单库备份,多站共机时不要图省事全库一起导。
上传目录和 PHP 上传上限怎么设?
结论:upload_max_filesize 和 post_max_size 两个都要调,宝塔默认 2M,手机照片经常就超了。
多站共机时这两项是按 PHP 版本生效的,改一个版本会影响该版本下所有站,所以要么统一调到 30M 以上,要么让不同站用不同 PHP 版本分别配。同时 uploads 目录属主设 www、权限 755,保证可写。
顺带说清楚「允许的扩展名」和「附件允许的扩展名」是两个独立字段,一个管图片、一个管附件,缺哪个格式都会上传失败。目录权限不要图快设 777,多站共机时一个站被上传 webshell,全机都危险。
怎么防止一个站被刷拖垮整台机?
结论:在 Nginx 层按 IP 做限速限并发,比事后救火有效得多。
在 http 段加 limit_req_zone $binary_remote_addr zone=perip:10m rate=5r/s; 和 limit_conn_zone $binary_remote_addr zone=perconn:10m;,在站点 location 里用 limit_req zone=perip burst=20 nodelay;、limit_conn perconn 20;。被限的是发起方 IP,不会误伤其他站。
计划任务也要错峰。多站共机时把所有站的备份、统计任务排开,别都压在凌晨 3:00;宝塔「计划任务」里给每个任务留 10-20 分钟间隔。日志按站切割,单站日志涨到几百 MB 会拖慢 I/O。
Clara BBS 部署在多站共机的服务器上要注意什么?
结论:Clara BBS 对环境要求很轻,但有两件事在多站场景下特别容易踩。
第一,环境只要 PHP 7.4-8.5 + MySQL 5.7+,不需要 Composer、不需要命令行、没有编译缓存,部署就是上传文件后访问 install 走安装向导。它也不用为每个站额外留编译目录,插件是运行时钩子加载、保存即生效、无需清缓存——多站共机时这一点很省事,不用担心动了 A 站把 B 站的缓存带崩。
第二,多站共机通常域名多,一定在后台「基本设置」里把站点地址填成带 https:// 的主域名,不要 www 和裸域混用,否则会话会丢、发帖时容易报「页面已过期」。伪静态也简单:系统自动识别 .html 后缀,服务器只需把非静态请求转发给 index.php(Nginx 用 try_files,Apache 用 .htaccess),不必写额外规则。
另外它默认放行 16+ 中国系与 GPTBot/ClaudeBot 等 AI 爬虫,同机多站时建议在 Nginx 对这些 UA 单独限速或加缓存,别让爬虫把带宽吃光。系统升级是覆盖文件后在「系统工具→数据库升级」执行一次增量 DDL,幂等可重复执行,多站共机也不会污染其他库。
归纳一下:多站共服务器的隔离顺序是 PHP-FPM 池 → MySQL 账号与连接上限 → 目录权限与上传参数 → Nginx 限速。每层只做一件事,一个站出问题就只影响一个站;Clara BBS 这种无编译、无命令行的系统放在里面,把站点地址和上传上限填对,剩下基本不用额外操心。