在VPS服务器上使用NGINX和PM2可以实现Node.js应用的服务扩展和负载均衡。PM2负责管理Node.js进程,而NGINX则作为反向代理服务器进行负载均衡。
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装Node.js和npm
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install -y nodejs
# 安装PM2
sudo npm install -g pm2
# 安装NGINX
sudo apt install -y nginx
# 启动应用
pm2 start app.js -i max # -i max表示根据CPU核心数启动最大进程数
# 或者指定进程数
pm2 start app.js -i 4 # 启动4个进程
# 保存PM2配置
pm2 save
# 设置开机自启
pm2 startup
编辑NGINX配置文件(通常在/etc/nginx/sites-available/default
或创建新的配置文件):
upstream node_app {
# 使用least_conn算法进行负载均衡
least_conn;
# 配置多个Node.js实例
server 127.0.0.1:3000;
server 127.0.0.1:3001;
server 127.0.0.1:3002;
server 127.0.0.1:3003;
# 保持连接以提高性能
keepalive 64;
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://node_app;
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;
}
}
upstream node_app {
server 127.0.0.1:3000 max_fails=3 fail_timeout=30s;
server 127.0.0.1:3001 max_fails=3 fail_timeout=30s;
# 每5秒检查一次后端服务器
check interval=5000 rise=2 fall=3 timeout=1000;
}
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# SSL优化配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256...';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
proxy_pass http://node_app;
# ...其他代理设置
}
}
# 测试NGINX配置
sudo nginx -t
# 重启NGINX
sudo systemctl restart nginx
# 监控PM2进程
pm2 monit
# 查看日志
pm2 logs
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
使用PM2的集群模式自动重启失败的进程
定期检查服务器资源使用情况:
htop
df -h
free -m
通过以上配置,您可以在VPS上建立一个高效、可扩展的Node.js服务架构,利用NGINX的负载均衡能力和PM2的进程管理功能,确保应用的高可用性和性能。