如何在Ubuntu VPS上用PM2部署多端口NextJS应用?解决502错误
解决Ubuntu VPS上NextJS应用部署的Nginx 502 Bad Gateway问题
第一步:检查PM2应用状态与端口监听
先确认第二个应用是否正常启动并占用3001端口:
- 执行
pm2 list,查看app2的状态是否为online。如果是errored,查看启动日志定位问题:pm2 logs app2 - 检查3001端口是否被监听:
无输出说明应用未在3001端口启动,问题出在PM2命令上。sudo lsof -i :3001 # 或用netstat sudo netstat -tulpn | grep 3001
第二步:修正PM2启动命令
你的启动命令参数格式错误,NextJS指定端口的正确方式有两种:
- 方式一:启动命令中加
-p参数pm2 start npm --name "app2" -- start -- -p 3001 - 方式二:通过环境变量指定端口
注:PORT=3001 pm2 start npm --name "app2" -- startcreate-next-app创建的项目默认支持这两种端口指定方式。
第三步:检查Nginx反向代理配置
确保Nginx的server块正确指向3001端口,示例配置:
server { listen 80; server_name your-second-domain.com; # 替换为你的域名 location / { proxy_pass http://localhost:3001; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
修改后验证配置合法性并重启Nginx:
sudo nginx -t sudo systemctl reload nginx
第四步:手动测试应用启动
切换到第二个NextJS项目目录,先手动启动确认应用本身无问题:
cd /path/to/your/second-nextjs-app npm install # 确保依赖完整 PORT=3001 npm start
如果手动启动失败,根据报错修复代码或依赖问题后,再用PM2重新启动。
第五步:检查防火墙(可选)
若应用绑定的是外网IP而非localhost,需确认3001端口未被防火墙拦截:
sudo ufw status # 如需开放端口 sudo ufw allow 3001/tcp
内容的提问来源于stack exchange,提问作者Irfan Arif
相关产品推荐
相关产品推荐

