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

基于Nginx泛域名的Node.js应用新旧版本分流部署咨询

子域名分流+PM2多分支部署方案(Linux+Nginx)

一、Nginx子域名分流配置

原泛域名配置会将所有子域名指向老版本(8090端口),我们需要通过精准匹配子域名的server块实现分流——Nginx会优先匹配精准域名规则,具体操作如下:

  1. 备份原配置(避免修改出错):
sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com.bak
  1. 修改Nginx配置文件(假设老子域名为old.example.com,新子域名为new.example.com):
# 新用户分支:精准匹配new.example.com
server {
    root /var/www/html;
    index index.html index.htm;
    server_name new.example.com;

    location / {
        proxy_pass http://localhost:8091;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
    }
}

# 老用户分支:精准匹配old.example.com
server {
    root /var/www/html;
    index index.html index.htm;
    server_name old.example.com;

    location / {
        proxy_pass http://localhost:8090;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
    }
}

# 保留原泛域名规则(可选:匹配未指定的子域名,默认指向老版本)
server {
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;
    server_name *.example.com example.com www.example.com;

    location / {
        proxy_pass http://localhost:8090;
        proxy_http_version 1.1;
        # 保留原有的其他proxy配置
    }
}
  1. 验证配置并重启Nginx:
sudo nginx -t
sudo systemctl restart nginx

二、PM2部署newBranch分支

1. 拉取新分支并准备运行环境

# 进入原项目目录(假设路径为/opt/node-app)
cd /opt/node-app
# 切换并拉取newBranch分支
git checkout newBranch
git pull origin newBranch
# 清理旧依赖并安装生产环境依赖
rm -rf node_modules package-lock.json
npm install --production

2. PM2启动新版本(指定8091端口)

# 启动新版本,命名为new-app,指定端口8091
pm2 start app.js --name "new-app" -- --port 8091
# 保存PM2进程配置,确保开机自启
pm2 save
pm2 startup systemd -u $USER --hp /home/$USER

3. 管理PM2进程

# 查看所有进程状态
pm2 status
# 查看新版本日志
pm2 logs new-app
# 查看老版本日志(假设老版本命名为old-app,未命名可先执行pm2 rename <进程ID> old-app)
pm2 logs old-app

三、CPU占用优化方案

1. PM2多核负载均衡

Node.js默认单线程,PM2可自动开启多实例利用服务器多核:

# 针对新版本,启动与CPU核心数一致的实例(-i max)
pm2 delete new-app
pm2 start app.js --name "new-app" -i max -- --port 8091
# 老版本同样可优化
pm2 delete old-app
pm2 start app.js --name "old-app" -i max -- --port 8090

注:PM2集群模式下,主进程会统一监听指定端口,自动完成负载均衡,无需额外配置。

2. 应用层面优化

  • 关闭不必要的日志输出,减少IO占用
  • 用pm2 monit监控内存/CPU,排查内存泄漏
  • 在Nginx配置中启用gzip压缩(添加gzip on;),减少传输数据量
  • 配置Nginx静态资源缓存规则,降低后端请求量

3. 系统层面优化

  • 调整Node.js内存限制:pm2 start app.js --name "new-app" --node-args="--max-old-space-size=2048"(分配2G内存)
  • 定期清理PM2日志:pm2 flush

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:05:15