PHP 8.4与Node.js可在宝塔面板中通过反向代理、独立端口、FPM多池隔离或Docker容器化四种方式共存,实现端口协调与环境隔离,互不干扰。

如果您在宝塔面板中已安装PHP 8.4,但同时需要运行Node.js应用(如Vue项目服务端、Express后端或Nuxt SSR),且不希望两者端口冲突或进程干扰,则需通过环境隔离与端口协调实现共存。以下是实现PHP 8.4与Node.js多环境并行使用的多种方法:
一、反向代理分离访问入口
该方法利用Nginx反向代理能力,将不同域名或路径请求分别转发至PHP 8.4的FastCGI服务与Node.js监听端口,实现逻辑隔离与统一入口。无需修改应用代码,兼容性高。
1、在宝塔面板【网站】中添加一个新站点,绑定主域名(如example.com)。
2、进入该站点的【配置文件】,在server块内location /段落下方插入以下Node.js代理规则:
立即学习“PHP免费学习笔记(深入)”;
location /api-node/ {
proxy_pass http://127.0.0.1:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
3、确保Node.js应用已启动并监听127.0.0.1:3000(不可绑定0.0.0.0或公网IP)。
4、保存配置后重启Nginx,访问example.com/api-node/即可路由至Node.js服务,其余路径默认交由PHP 8.4处理。
二、独立端口+防火墙放行
此方法为Node.js分配独立公网可访问端口(如3001),绕过Nginx统一入口,适用于需直接暴露Node.js服务的场景;PHP 8.4仍通过80/443端口提供Web服务,二者物理隔离。
1、编辑Node.js启动脚本,将app.listen()参数明确指定为3001,例如:app.listen(3001, '127.0.0.1')。
2、在宝塔面板【安全】页面中,放行端口3001(TCP协议),确保系统防火墙允许该端口通信。
3、使用pm2管理Node.js进程:执行pm2 start app.js --name "node-api",并运行pm2 save持久化。
4、验证访问:在浏览器中直接输入服务器IP加端口(如http://192.168.1.100:3001/health)确认Node.js响应正常。
三、PHP-FPM多池隔离+Node.js进程用户分离
通过为PHP 8.4创建独立FPM池,并限定其运行用户与Node.js进程用户不同,避免文件权限冲突与资源争抢,提升多环境稳定性与安全性。
1、进入宝塔面板【软件商店】→【PHP 8.4】→【设置】→【配置修改】,在末尾新增自定义FPM池配置段:
[www-node]
listen = /www/wwwroot/example.com/runtime/php-node.sock
listen.owner = www
listen.group = www
user = phpnode
group = phpnode
2、执行命令创建专用系统用户:useradd -r -s /sbin/nologin phpnode。
3、重启PHP 8.4服务,在对应网站根目录的.htaccess或Nginx配置中,将fastcgi_pass指向新sock路径:fastcgi_pass unix:/www/wwwroot/example.com/runtime/php-node.sock;
4、Node.js进程使用普通用户(如www)启动,确保与phpnode用户无重叠,防止/tmp或session目录写入冲突。
四、Docker容器化隔离运行
借助Docker将Node.js应用封装为独立容器,与宝塔宿主机上的PHP 8.4完全解耦;容器通过bridge网络与宿主机Nginx通信,互不侵入系统环境。
1、在服务器安装Docker与docker-compose,执行systemctl enable docker && systemctl start docker。
2、在项目根目录新建docker-compose.yml,内容包含Node.js服务与network配置:
version: '3'
services:
node-app:
image: node:18-alpine
working_dir: /app
volumes:
- ./src:/app
command: npm start
ports:
- "3002:3000"
restart: always
3、执行docker-compose up -d启动容器,确认容器内服务监听3000端口,映射宿主机3002端口。
4、在宝塔Nginx配置中添加反向代理,将location /node-docker/指向http://127.0.0.1:3002/。











