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

如何在PM2上运行Node.js应用?多项目部署访问异常求助

解决两个PM2部署项目访问混淆的问题

兄弟,我之前也踩过这个坑,大概率是端口冲突或者PM2进程/反向代理配置的问题,咱们一步步排查解决:

1. 先确认PM2进程状态

登录服务器后,先执行这条命令查看所有PM2管理的进程:

pm2 list

重点看这两个关键信息:

  • 两个项目的name是不是重复了(如果没指定名称,可能都叫www,很容易混淆)
  • 每个进程的PORT列是不是不同的端口号,如果两个项目用了同一个端口(比如都是3000),那第二个项目要么启动失败,要么被第一个项目的端口占用,导致访问时跳转到第一个项目的内容。

2. 检查第二个项目的端口配置

打开第二个项目的www文件(或者主入口文件比如app.js),找到监听端口的代码:

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

确保这里的端口号和第一个项目不一样,比如改成3001。如果项目用环境变量指定端口(比如process.env.PORT),要确认启动时有没有设置不同的环境变量,或者配置文件里的端口是否正确。

3. 用PM2启动时明确区分项目

为了避免进程名称混淆,启动第二个项目时指定一个唯一名称,同时确保端口正确:

# 给第二个项目命名为second-app,指定端口3001
pm2 start www --name "second-app" -- --port 3001

这里的-- --port 3001是把端口参数传递给Node.js项目(如果你的项目支持命令行传参的话)。如果项目用环境变量配置端口,也可以这样启动:

PORT=3001 pm2 start www --name "second-app"

4. 检查反向代理配置(如果用了Nginx)

如果你的项目通过Nginx反向代理对外提供服务,要检查Nginx的配置文件(一般在/etc/nginx/sites-available/目录下),确保不同域名/路径指向对应端口:
比如第一个项目的配置:

server {
    listen 80;
    server_name first-app.yourdomain.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
    }
}

第二个项目的配置要指向3001端口:

server {
    listen 80;
    server_name second-app.yourdomain.com;

    location / {
        proxy_pass http://localhost:3001;
        proxy_set_header Host $host;
    }
}

修改后重启Nginx生效:sudo systemctl restart nginx

5. 查看第二个项目的启动日志

如果以上步骤都没问题,还是访问异常,就看看第二个项目的PM2日志,排查是否有启动报错:

pm2 logs second-app

日志里可能会提示端口被占用、依赖缺失等问题,帮你快速定位根源。

最后验证

重启第二个项目的PM2进程:

pm2 restart second-app

再访问第二个项目的URL,应该就能正常显示预期内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:36:48