You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ubuntu VPS上用PM2部署多端口NextJS应用?解决502错误

解决Ubuntu VPS上NextJS应用部署的Nginx 502 Bad Gateway问题

第一步:检查PM2应用状态与端口监听

先确认第二个应用是否正常启动并占用3001端口:

  • 执行pm2 list,查看app2的状态是否为online。如果是errored,查看启动日志定位问题:
    pm2 logs app2
    
  • 检查3001端口是否被监听:
    sudo lsof -i :3001
    # 或用netstat
    sudo netstat -tulpn | grep 3001
    
    无输出说明应用未在3001端口启动,问题出在PM2命令上。

第二步:修正PM2启动命令

你的启动命令参数格式错误,NextJS指定端口的正确方式有两种:

  • 方式一:启动命令中加-p参数
    pm2 start npm --name "app2" -- start -- -p 3001
    
  • 方式二:通过环境变量指定端口
    PORT=3001 pm2 start npm --name "app2" -- start
    
    注:create-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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:47:05