核心是为每个站点配置独立php-fpm进程池,使用专属用户、独立socket和严格路径限制,并让nginx精准指向对应socket,实现多站隔离运行。

核心是给每个站点配独立的 PHP-FPM 进程池,用专属用户、独立 socket、严格路径限制,再让 Nginx 精准指向——这样一台服务器跑多个 PHP 站点,一个崩了不会拖垮别的。
每个站点建专属 PHP-FPM 池
在 PHP-FPM 的 pool.d 目录下(如 /etc/php/8.2/fpm/pool.d/ 或宝塔里的 /www/server/php/74/etc/php-fpm.d/),为每个域名新建一个 .conf 文件,比如 site-a.com.conf:
- pool 名称用域名,例如 [site-a.com],方便识别
- listen必须用唯一 Unix socket,如 /run/php/php8.2-fpm-site-a.sock,不共用默认 sock
- user/group设成该站点专用系统用户(如 sitea:sitea),避免权限混用
- open_basedir只放开本目录和必要路径:/var/www/site-a:/tmp:/proc
- pm 参数按需调,比如 pm.max_children = 25,防单站吃光全部进程
Nginx 配置里绑定对应池
每个站点的 Nginx server 块中,location ~ \.php$ 区域必须明确指定 socket 路径:
- 找到 fastcgi_pass 行,改成和 FPM 池 listen 一致的地址,例如:fastcgi_pass unix:/run/php/php8.2-fpm-site-a.sock;
- 不要留着默认的 fastcgi_pass unix:/run/php/php8.2-fpm.sock;,否则所有站都挤进同一个池
- 检查 root 和 index 是否指向正确站点目录,避免脚本执行错位
补充安全与稳定性措施
光分池还不够,加几层硬约束能进一步防干扰:
- 在 FPM 池配置里加 php_admin_value[memory_limit] = 128M 和 pm.max_requests = 500,强制回收老化进程
- 在 Nginx 的 PHP location 块里加一行:fastcgi_param PHP_VALUE "open_basedir=/var/www/site-a:/tmp";,双重限制路径
- 为每个站点创建独立系统用户并设 /usr/sbin/nologin shell,杜绝 SSH 登录和跨用户操作
- 启用 slowlog 和 access.log 到各自路径,出问题时日志不混,排查快
验证和重启顺序不能错
改完别急着重启,按顺序走才稳:
- 先校验 PHP-FPM 配置:php-fpm8.2 -t(版本号按实际改)
- 再测试 Nginx 配置:nginx -t
- 依次重启服务:systemctl reload php8.2-fpm → systemctl reload nginx
- 访问各站点的 phpinfo() 页面,确认 Loaded Configuration File 和 open_basedir 显示值符合预期
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











