插件窝 干货文章 NGINX PM2 VPS: 构建安全的Web应用服务器

NGINX PM2 VPS: 构建安全的Web应用服务器

sudo NGINX 配置 应用 1018    来源:    2025-04-11

NGINX + PM2 + VPS: 构建安全的Web应用服务器指南

概述

本指南将介绍如何在VPS上使用NGINX和PM2构建一个安全、高性能的Web应用服务器架构。这种组合非常适合部署Node.js应用,同时提供企业级的安全性和性能。

1. VPS基础设置

1.1 初始服务器安全配置

# 更新系统
sudo apt update && sudo apt upgrade -y

# 创建新用户(非root)
sudo adduser deploy
sudo usermod -aG sudo deploy

# 设置SSH密钥登录(禁用密码登录)
sudo mkdir -p /home/deploy/.ssh
sudo cp ~/.ssh/authorized_keys /home/deploy/.ssh/
sudo chown -R deploy:deploy /home/deploy/.ssh
sudo chmod 700 /home/deploy/.ssh
sudo chmod 600 /home/deploy/.ssh/authorized_keys

# 修改SSH配置
sudo nano /etc/ssh/sshd_config
# 修改以下参数:
# Port 2222 (或其他非标准端口)
# PermitRootLogin no
# PasswordAuthentication no

# 重启SSH服务
sudo systemctl restart sshd

1.2 防火墙配置

# 安装UFW
sudo apt install ufw -y

# 配置防火墙规则
sudo ufw allow 2222/tcp  # SSH端口
sudo ufw allow 80/tcp    # HTTP
sudo ufw allow 443/tcp   # HTTPS
sudo ufw enable

2. 安装和配置Node.js与PM2

2.1 安装Node.js

# 使用NodeSource安装最新LTS版本
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs

2.2 安装PM2

sudo npm install -g pm2

# 设置PM2开机启动
pm2 startup
# 按照提示执行生成的命令

2.3 PM2基本使用

# 启动应用
pm2 start app.js --name "my-app"

# 查看运行中的应用
pm2 list

# 监控应用
pm2 monit

# 保存当前进程列表
pm2 save

# 查看日志
pm2 logs

3. 安装和配置NGINX

3.1 安装NGINX

sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

3.2 配置反向代理

# 创建新的站点配置
sudo nano /etc/nginx/sites-available/my-app

# 添加以下内容(根据实际情况修改)
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    location / {
        proxy_pass http://localhost:3000;  # Node.js应用端口
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

# 启用配置
sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled

# 测试配置并重启
sudo nginx -t
sudo systemctl restart nginx

4. 安全加固

4.1 SSL证书配置(使用Let's Encrypt)

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

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

# 设置自动续订
sudo certbot renew --dry-run

4.2 NGINX安全配置

# 编辑nginx.conf
sudo nano /etc/nginx/nginx.conf

# 在http块中添加以下安全相关配置
server_tokens off;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

4.3 应用层面的安全

  • 使用环境变量存储敏感信息
  • 实现CSRF保护
  • 设置适当的CORS策略
  • 定期更新所有依赖项

5. 监控与维护

5.1 日志管理

# 设置日志轮转
sudo nano /etc/logrotate.d/node-app

# 添加以下内容
/var/log/node-app/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 deploy deploy
    sharedscripts
    postrotate
        pm2 reloadLogs > /dev/null
    endscript
}

5.2 性能监控

# 安装PM2监控模块
pm2 install pm2-server-monit
pm2 install pm2-logrotate

6. 备份策略

# 创建备份脚本
sudo nano /usr/local/bin/backup-app

# 添加内容(示例)
#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/backups/app"
mkdir -p $BACKUP_DIR/$DATE

# 备份应用代码
tar -czf $BACKUP_DIR/$DATE/app-code.tar.gz /path/to/your/app

# 备份数据库
mysqldump -u user -p'password' database_name > $BACKUP_DIR/$DATE/db.sql

# 备份NGINX配置
tar -czf $BACKUP_DIR/$DATE/nginx-config.tar.gz /etc/nginx

# 设置可执行权限
sudo chmod +x /usr/local/bin/backup-app

# 添加到cron
sudo crontab -e
# 添加:0 3 * * * /usr/local/bin/backup-app

总结

通过以上步骤,您已经在VPS上建立了一个安全、高性能的Web应用服务器环境,使用NGINX作为反向代理和静态文件服务器,PM2作为Node.js应用进程管理器。这种架构提供了:

  1. 企业级安全性
  2. 高性能和可扩展性
  3. 自动化部署和监控
  4. 可靠的备份策略

定期检查日志、更新软件包并监控服务器性能,可以确保您的应用长期稳定运行。