在现代 Web 应用部署中,Node.js
搭配 PM2
是常见的后端运行方案,而 Nginx
是最广泛使用的 Web 服务器和反向代理工具。很多开发者在使用 PM2 管理 Node 应用后,常常会疑惑:"我还需要用 Nginx 吗? "
本文将系统讲解:
- Nginx 相对于 PM2 的优势
- Nginx + Node 的推荐部署结构
- 如何通过 Certbot 实现 HTTPS 的自动续签
一、PM2 与 Nginx 各自职责与优势
1. PM2 是什么?
PM2 是一个 Node.js 进程管理工具,主要用于:
- 守护进程(进程挂掉会自动重启)
- 日志管理
- 集群模式(多核利用)
- 热重载
- 启动脚本管理(如
pm2 startup
)
✅ 适用于:Node.js 应用的稳定运行与管理
2. Nginx 是什么?
Nginx 是一个高性能 Web 服务器和反向代理服务器,主要用于:
- 处理 HTTP/HTTPS 请求
- 提供静态文件服务
- 反向代理到后端(如 Node、Python、PHP)
- 负载均衡、限流、防火墙、安全控制
- SSL / TLS 终端接入(HTTPS)
✅ 适用于:生产环境中的请求转发、安全防护、性能优化
3. 为什么有了 PM2 还要用 Nginx?
功能 | PM2 | Nginx | 推荐使用 |
---|---|---|---|
Node 应用守护 | ✅ 是 | ❌ 否 | PM2 |
静态文件处理 | ✅ 有限 | ✅ 高效 | Nginx 更快 |
TLS/HTTPS 支持 | ✅ 可实现 | ✅ 简洁稳定 | Nginx 更成熟 |
Gzip 压缩 | ✅ 可做 | ✅ 原生支持 | Nginx 性能优 |
请求限速/防攻击 | ❌ 不擅长 | ✅ 原生支持 | Nginx |
多服务代理 | ❌ 需额外逻辑 | ✅ 灵活配置 | Nginx |
负载均衡 | ✅ 可做 | ✅ 更强 | 二者可结合 |
自动续签 HTTPS | ❌ 需手动 | ✅ 支持 Certbot | Nginx 更好 |
✅ 结论:Nginx + PM2 是一个强强组合,前者处理 Web 层、后者管理 Node 后端,是现代生产部署的标准做法。
二、推荐部署架构
css
plaintext
复制编辑
[ Internet ]
↓
[ Nginx (监听 80/443) ]
↓
[ Node.js 应用 (由 PM2 守护,监听 3000) ]
Nginx 接管所有公网流量,负责:
- 自动将 HTTP 重定向到 HTTPS
- 反向代理到 Node 应用
- 控制缓存、Gzip、安全头部
- 管理 TLS 证书(通过 Certbot 自动续签)
Node.js 专注业务逻辑,由 PM2 守护。
三、使用 Nginx 实现 HTTPS 自动续签(Let's Encrypt)
1. 准备条件
- 一台部署了 Nginx 的服务器(如阿里云)
- 一个解析到该服务器的域名(如
example.com
) - 已开放 80 和 443 端口
2. 安装 Certbot
Ubuntu / Debian:
sql
bash
复制编辑
sudo apt update
sudo apt install certbot python3-certbot-nginx
CentOS / RHEL:
arduino
bash
复制编辑
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx
3. 申请免费 HTTPS 证书(自动配置 Nginx)
css
bash
复制编辑
sudo certbot --nginx -d example.com -d www.example.com
成功后:
- 自动获取证书
- 自动配置 Nginx SSL 设置
- 配置 80 → 443 重定向
4. 检查 HTTPS 自动续签是否启用
运行 dry-run 测试:
arduino
bash
复制编辑
sudo certbot renew --dry-run
如果输出包含:
css
css
复制编辑
Congratulations, all renewals succeeded
说明续签配置成功。Certbot 会自动添加计划任务,无需手动维护。
5. 手动 Nginx 配置示例(可自定义控制)
ini
nginx
复制编辑
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://localhost:3000; # Node 应用监听端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
四、总结
- PM2 专注于 Node 应用的稳定运行
- Nginx 在请求管理、安全控制和性能方面不可替代
- 利用
certbot
,可以轻松实现免费 SSL + 自动续签 - 推荐部署:Nginx + Node.js(PM2) ,构成安全、稳定、高性能的 Web 服务栈
如果你正在使用阿里云或其他 VPS,只需要运行如下命令就能完成部署:
css
bash
复制编辑
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com
安全、免费、自动续期,一站式 HTTPS 解决方案。