基于Nginx泛域名的Node.js应用新旧版本分流部署咨询
子域名分流+PM2多分支部署方案(Linux+Nginx)
一、Nginx子域名分流配置
原泛域名配置会将所有子域名指向老版本(8090端口),我们需要通过精准匹配子域名的server块实现分流——Nginx会优先匹配精准域名规则,具体操作如下:
- 备份原配置(避免修改出错):
sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com.bak
- 修改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配置 } }
- 验证配置并重启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
相关产品推荐
相关产品推荐

