需要多个 PHP-FPM pool以实现站点间资源与权限硬隔离,避免单站异常导致其他站点502错误;通过include机制加载php-fpm.d/下独立.conf文件,为各站点配置专属pool、唯一socket及open_basedir限制,并在Nginx中绑定对应socket路径。
当多个 共用同一个 PHP-FPM pool(比如默认的 www 池)时,一个站点出现高并发、脚本卡死或内存泄漏,会迅速耗尽该 pool 的全部子进程(如 pm.max_children=50),导致其他站点全部返回 502 错误。多个 pool 就像给每个 配独立的“厨房”——互不抢灶台、不串味、不干扰,实现资源与权限硬隔离。
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。
在 /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 进程能读写该 socketuser = 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 路径和根目录白名单。
进入宝塔【 】→ 编辑对应站点 → 【配置文件】,找到 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 或通过宝塔面板操作)。