为不同域名配置独立 PHP-FPM 进程池,需要在 PHP-FPM 配置目录中为每个站点创建独立的 pool 配置文件,并在 Web 服务器中将域名请求指向对应的 socket 或端口。适用于需要隔离资源、独立设置 PHP 版本或权限的多站点环境,风险在于配置错误可能导致服务无法启动或权限拒绝。
先说结论:通过创建多个 pool 配置文件实现进程隔离,适合多站点资源独立管理场景
- 适合:需要隔离用户权限、PHP 配置或内存资源的多域名环境
- 先准备:确认 PHP-FPM 配置目录路径及当前运行用户
- 验收:检查进程列表及 Web 服务器错误日志无权限报错
命令速用版
# 复制默认配置
cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/site1.conf
# 修改配置中的名称和监听 socket
# 在 Nginx 中指定 fastcgi_pass unix:/run/php/site1.sock为什么会这样
PHP-FPM 支持多 pool 机制,每个 pool 可独立定义运行用户、监听地址和进程参数。Web 服务器通过不同的 socket 或端口区分请求流向,从而实现域名级的资源隔离和配置差异化。
分步处理
1. 查找配置目录:通常在 /etc/php-fpm.d/ 或 /etc/php/版本/fpm/pool.d/
2. 创建新 pool 文件:复制 www.conf 为新文件名,如 site1.conf
3. 修改关键参数:更改 [pool] 名称、user、group 和 listen 路径
4. 重启服务:执行 systemctl restart php-fpm 加载新配置
5. 绑定 Web 服务器:在 Nginx 或 Apache 中将特定域名指向新 socket
怎么验证是否生效
使用 ps aux | grep php-fpm 查看进程名称是否包含新 pool 名,或在站点中运行 phpinfo() 检查配置值,同时观察 Web 服务器错误日志是否有连接拒绝记录。
常见坑
Socket 文件权限错误会导致 Web 服务器 502 报错,不同 pool 的 listen 路径不能重复,修改配置后必须重启 PHP-FPM 服务才能生效。
常见问题
不同 pool 能用不同 PHP 版本吗
可以,但需要安装多版本 PHP-FPM 并监听不同端口或 socket。
配置独立 pool 会增加内存消耗吗
会,每个 pool 都会维护独立的进程集合,基础内存占用会叠加。
参考来源
- PHP-FPM Official Documentation - Installation Configuration: https://www.php.net/manual/en/install.fpm.configuration.php
- Linux Distribution Manuals (Ubuntu/Debian/CentOS) - PHP-FPM Pool Configuration