插件窝 干货文章 教你如何利用NGINX和PM2实现VPS服务器的高可用性

教你如何利用NGINX和PM2实现VPS服务器的高可用性

NGINX PM2 可用性 配置 426    来源:    2025-04-11

利用NGINX和PM2实现VPS服务器高可用性指南

概述

高可用性(High Availability, HA)是确保系统在大部分时间都能正常运行的关键目标。本指南将介绍如何使用NGINX作为反向代理和负载均衡器,结合PM2进程管理器,在VPS服务器上实现高可用性解决方案。

系统架构

客户端 → NGINX (负载均衡) → 多个PM2管理的Node.js应用实例

实施步骤

1. 安装必要软件

# 更新系统
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

2. 使用PM2管理应用

启动应用

pm2 start app.js -i max --name "myapp"

-i max参数让PM2根据CPU核心数自动创建多个实例

常用PM2命令

# 查看运行中的应用
pm2 list

# 监控应用状态
pm2 monit

# 查看日志
pm2 logs

# 保存当前进程列表
pm2 save

# 设置开机启动
pm2 startup

3. 配置NGINX作为反向代理

编辑NGINX配置文件(/etc/nginx/sites-available/yourdomain.com):

upstream node_app {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
    # 添加更多端口以匹配PM2启动的实例数
}

server {
    listen 80;
    server_name yourdomain.com www.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;
    }
}

4. 启用NGINX配置并测试

# 创建符号链接
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/

# 测试NGINX配置
sudo nginx -t

# 重启NGINX
sudo systemctl restart nginx

5. 实现高可用性增强功能

健康检查

在NGINX配置中添加健康检查:

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;
    # ...

    # 添加健康检查端点
    check interval=5000 rise=2 fall=3 timeout=1000 type=http;
    check_http_send "HEAD /health HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;
}

负载均衡策略

NGINX支持多种负载均衡算法: - 轮询(默认) - 最少连接(least_conn) - IP哈希(ip_hash)

upstream node_app {
    least_conn;
    # 其余配置...
}

启用HTTP/2和Gzip压缩

server {
    listen 443 ssl http2;
    # SSL配置...

    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}

6. 监控和日志

PM2日志管理

# 安装PM2日志轮转模块
pm2 install pm2-logrotate

# 配置日志轮转
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
pm2 set pm2-logrotate:compress true

NGINX日志分析

考虑使用工具如GoAccess进行实时日志分析:

sudo apt install -y goaccess
goaccess /var/log/nginx/access.log --log-format=COMBINED

7. 安全加固

防火墙配置

# 允许必要端口
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable

限制连接数

在NGINX中:

limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;

server {
    limit_conn conn_limit_per_ip 20;
    limit_req zone=req_limit_per_ip burst=20 nodelay;
}

高级高可用性方案

对于更高级的高可用性需求,可以考虑:

  1. 多服务器集群:在多台VPS上部署应用,使用NGINX作为中央负载均衡器
  2. 数据库分离:将数据库迁移到单独的服务器或使用托管数据库服务
  3. 自动扩展:使用云提供商的自动扩展功能
  4. 容器化:使用Docker和Kubernetes进行容器编排

维护和监控

  1. 设置监控工具如New Relic、Datadog或开源的Prometheus+Grafana
  2. 配置警报通知
  3. 定期进行负载测试
  4. 建立备份和灾难恢复计划

通过以上配置,您的VPS服务器将具备较高的可用性,能够处理更多并发请求,并在单个实例失败时自动切换到其他可用实例。