需要多个 php-fpm pool以实现站点间资源与权限硬隔离,避免单站异常导致其他站点502错误;通过include机制加载php-fpm.d/下独立.conf文件,为各站点配置专属pool、唯一socket及open_basedir限制,并在nginx中绑定对应socket路径。

为什么需要多个 PHP-FPM pool
当多个网站共用同一个 PHP-FPM pool(比如默认的 www 池)时,一个站点出现高并发、脚本卡死或内存泄漏,会迅速耗尽该 pool 的全部子进程(如 pm.max_children=50),导致其他站点全部返回 502 错误。多个 pool 就像给每个网站配独立的“厨房”——互不抢灶台、不串味、不干扰,实现资源与权限硬隔离。
基础配置:启用 include 机制
PHP-FPM 默认只读取主配置文件 php-fpm.conf,要支持多 pool,必须开启配置分片加载:
- 编辑
/www/server/php/74/etc/php-fpm.conf(路径依宝塔实际 PHP 版本调整) - 确认包含这一行:
include = etc/php-fpm.d/*.conf - 创建目录:
mkdir -p /www/server/php/74/etc/php-fpm.d
这样 PHP-FPM 启动时会自动加载 php-fpm.d/ 下所有 .conf 文件,每个文件可定义一个独立 pool。
为每个站点创建专属 pool 配置
在 /www/server/php/74/etc/php-fpm.d/ 下新建站点对应配置,例如 site-a.com.conf:
-
[site-a.com]—— pool 名称,建议与域名一致,便于识别 -
listen = /tmp/php-cgi-site-a.sock—— socket 路径必须唯一,不能与其他 pool 冲突 -
listen.mode = 666—— 确保 Nginx 进程能读写该 socket -
user = www和group = www—— 宝塔默认网站运行用户,保持权限一致 -
pm = dynamic,并按需调参:pm.max_children=30、pm.start_servers=5、pm.max_requests=500 - 可加
php_admin_value[open_basedir] = /www/wwwroot/site-a:/tmp:/proc强化文件访问限制
同理,为 site-b.com 创建 site-b.com.conf,仅修改 pool 名、socket 路径和根目录白名单。
绑定 Nginx 虚拟主机到指定 pool
进入宝塔【网站】→ 编辑对应站点 → 【配置文件】,找到 location ~ \.php$ 区块,将其中的 fastcgi_pass 改为对应 socket:
- 原默认值:
fastcgi_pass unix:/tmp/php-cgi-74.sock; - 改为:
fastcgi_pass unix:/tmp/php-cgi-site-a.sock;
保存后,宝塔会自动重载 Nginx。注意:不要手动改错路径,否则 502;改完务必执行 php-fpm74 -t 校验配置语法,再重启 PHP-FPM 服务(service php-fpm-74 restart 或通过宝塔面板操作)。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











