最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中 PHP-FPM 如何配置多个 pool 池实现多站点资源隔离
时间:2026-08-29 11:18:50 编辑:袖梨 来源:一聚教程网
需要多个 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 或通过宝塔面板操作)。