在VPS上部署Web应用时,NGINX和PM2是两个强大的工具组合。NGINX作为高性能的Web服务器和反向代理,PM2作为Node.js应用的进程管理器,二者结合可以构建稳定高效的服务器环境。
# 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;
}
}
# 安装Certbot
sudo apt install certbot python3-certbot-nginx
# 获取证书
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
# 自动续期测试
sudo certbot renew --dry-run
# 全局安装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
调整worker进程数:
worker_processes auto; # 自动根据CPU核心数设置
启用Gzip压缩:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
静态文件缓存:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
add_header Cache-Control "public, no-transform";
}
负载均衡:
pm2 start app.js -i max # 根据CPU核心数启动多个实例
日志管理:
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
监控:
pm2 monit
隐藏版本信息:
server_tokens off;
限制HTTP方法:
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
}
防止点击劫持:
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
使用非root用户运行:
sudo chown -R nodeuser:nodeuser /path/to/your/app
sudo -u nodeuser pm2 start app.js
环境变量保护:
使用.env
文件并通过PM2注入,而非硬编码在配置中
502 Bad Gateway错误:
pm2 logs
端口冲突:
sudo lsof -i :3000 # 检查端口占用
sudo kill -9 <PID> # 终止占用进程
性能瓶颈:
htop
查看资源使用/var/log/nginx/error.log
pm2 monit
监控Node应用通过合理配置NGINX和PM2,您可以构建一个高性能、稳定且易于维护的VPS环境,为Web应用提供可靠的后端支持。