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

VM服务器502 Bad Gateway错误求助:端口占用及Nginx上游连接异常

解决VM Web服务器502 Bad Gateway + PM2端口占用问题

嘿,看了你的日志,问题根源很明确——你的Express服务要监听的9000端口被别的进程占了,这直接导致服务启动失败,Nginx连不上后端就抛出了upstream prematurely closed connection的502错误。给你一步步解决的办法:

  • 第一步:定位占用9000端口的进程
    用下面两个命令中的任意一个,就能查到哪个进程在占端口:

    lsof -i :9000  # 会显示进程名、PID等详细信息
    # 或者
    netstat -tulpn | grep 9000  # 适合没有lsof的环境,同样能看到PID和进程名
    

    执行后你会得到类似node 1234 root 6u IPv6 12345 0t0 TCP *:9000 (LISTEN)的输出,其中1234就是进程的PID。

  • 第二步:终止占用端口的进程
    如果是你之前的Node服务没正常关闭,直接用PID杀掉它:

    kill -9 1234  # 把1234换成你查到的实际PID
    

    如果是其他无关进程占用了9000端口,你可以选择:

    • 停止那个无关进程(如果它不是必须运行的);
    • 或者修改你的Express服务端口,打开/var/www/wsApp/client/server.js,把app.listen(9000)改成其他未被占用的端口(比如9001),同时记得同步修改Nginx配置里的upstream端口。
  • 第三步:重启PM2服务
    端口释放后,重启你的PM2服务:

    pm2 restart server  # 如果你的PM2进程名是server
    # 或者先删除旧进程再启动,确保干净
    pm2 delete server && pm2 start /var/www/wsApp/client/server.js --name server
    
  • 第四步:验证问题是否解决
    查看PM2日志确认服务正常启动:

    pm2 logs server
    

    如果看到类似Listening on port 9000的日志,说明服务启动成功,此时再访问你的Web服务,502错误应该就消失了。

额外预防小技巧

为了避免下次再出现这种情况,可以给PM2配置自动重启策略,或者在你的Express服务启动前加一段端口检测逻辑,比如:

const port = 9000;
app.listen(port, (err) => {
  if (err) {
    console.error(`Port ${port} is in use:`, err);
    process.exit(1);
  }
  console.log(`Server running on port ${port}`);
});

内容的提问来源于stack exchange,提问作者Fille_M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:46:40