插件窝 干货文章 NGINX与PM2: 构建高效的VPS环境

NGINX与PM2: 构建高效的VPS环境

NGINX PM2 配置 使用 512    来源:    2025-04-11

NGINX与PM2: 构建高效的VPS环境指南

概述

在VPS上部署Web应用时,NGINX和PM2是两个强大的工具组合。NGINX作为高性能的Web服务器和反向代理,PM2作为Node.js应用的进程管理器,二者结合可以构建稳定高效的服务器环境。

NGINX配置

基本安装

# Ubuntu/Debian
sudo apt update
sudo apt install nginx

# CentOS/RHEL
sudo yum install epel-release
sudo yum install nginx

# 启动NGINX
sudo systemctl start nginx
sudo systemctl enable nginx

反向代理配置

创建或编辑/etc/nginx/sites-available/yourdomain.com:

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    location / {
        proxy_pass http://localhost:3000; # 假设Node应用运行在3000端口
        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;
    }
}

SSL配置 (使用Let's Encrypt)

# 安装Certbot
sudo apt install certbot python3-certbot-nginx

# 获取证书
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

# 自动续期测试
sudo certbot renew --dry-run

PM2配置

安装与基本使用

# 全局安装PM2
npm install pm2 -g

# 启动应用
pm2 start app.js

# 常用命令
pm2 list              # 查看运行中的进程
pm2 logs              # 查看日志
pm2 restart app_name  # 重启应用
pm2 stop app_name     # 停止应用
pm2 delete app_name   # 删除应用

进程管理配置

创建ecosystem.config.js:

module.exports = {
  apps: [{
    name: 'my-app',
    script: 'app.js',
    instances: 'max',  // 使用所有CPU核心
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }]
};

启动集群

pm2 start ecosystem.config.js --env production

设置开机启动

# 生成启动脚本
pm2 startup

# 保存当前进程列表
pm2 save

性能优化

NGINX优化

  1. 调整worker进程数:

    worker_processes auto; # 自动根据CPU核心数设置
    
  2. 启用Gzip压缩:

    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
  3. 静态文件缓存:

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
       expires 365d;
       add_header Cache-Control "public, no-transform";
    }
    

PM2优化

  1. 负载均衡:

    pm2 start app.js -i max # 根据CPU核心数启动多个实例
    
  2. 日志管理:

    pm2 install pm2-logrotate
    pm2 set pm2-logrotate:max_size 10M
    pm2 set pm2-logrotate:retain 30
    
  3. 监控:

    pm2 monit
    

安全配置

NGINX安全

  1. 隐藏版本信息:

    server_tokens off;
    
  2. 限制HTTP方法:

    if ($request_method !~ ^(GET|HEAD|POST)$ ) {
       return 405;
    }
    
  3. 防止点击劫持:

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    

PM2安全

  1. 使用非root用户运行:

    sudo chown -R nodeuser:nodeuser /path/to/your/app
    sudo -u nodeuser pm2 start app.js
    
  2. 环境变量保护: 使用.env文件并通过PM2注入,而非硬编码在配置中

常见问题解决

  1. 502 Bad Gateway错误:

    • 检查Node应用是否运行
    • 检查PM2日志: pm2 logs
    • 确认NGINX代理配置正确
  2. 端口冲突:

    sudo lsof -i :3000  # 检查端口占用
    sudo kill -9 <PID>  # 终止占用进程
    
  3. 性能瓶颈:

    • 使用htop查看资源使用
    • 检查NGINX错误日志: /var/log/nginx/error.log
    • 使用pm2 monit监控Node应用

最佳实践

  1. 使用NGINX提供静态文件,减轻Node负担
  2. 为生产环境设置适当的日志轮转
  3. 定期更新NGINX和PM2到最新稳定版本
  4. 使用防火墙限制不必要的端口访问
  5. 为不同的环境(开发/测试/生产)维护单独的配置

通过合理配置NGINX和PM2,您可以构建一个高性能、稳定且易于维护的VPS环境,为Web应用提供可靠的后端支持。