本指南将介绍如何在VPS上使用NGINX和PM2构建一个安全、高性能的Web应用服务器架构。这种组合非常适合部署Node.js应用,同时提供企业级的安全性和性能。
# 更新系统
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
# 安装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
# 使用NodeSource安装最新LTS版本
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install -g pm2
# 设置PM2开机启动
pm2 startup
# 按照提示执行生成的命令
# 启动应用
pm2 start app.js --name "my-app"
# 查看运行中的应用
pm2 list
# 监控应用
pm2 monit
# 保存当前进程列表
pm2 save
# 查看日志
pm2 logs
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
# 创建新的站点配置
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
# 安装Certbot
sudo apt install certbot python3-certbot-nginx -y
# 获取证书
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
# 设置自动续订
sudo certbot renew --dry-run
# 编辑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";
# 设置日志轮转
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
}
# 安装PM2监控模块
pm2 install pm2-server-monit
pm2 install pm2-logrotate
# 创建备份脚本
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应用进程管理器。这种架构提供了:
定期检查日志、更新软件包并监控服务器性能,可以确保您的应用长期稳定运行。