Nest.js+React.js应用PM2部署下开启HTTPS的实现方法咨询
在Windows+PM2环境下为Nest.js+React应用开启HTTPS
下面提供两种可行方案,优先推荐反向代理模式,更易维护和扩展。
方案一:使用反向代理(推荐,以Caddy为例)
Caddy支持自动申请和续期Let's Encrypt证书,配置简单,适配Windows环境。
安装Caddy
下载Windows版Caddy,解压到C:\Caddy目录。编写Caddy配置文件
在C:\Caddy下创建Caddyfile,替换为你的域名和服务端口:your-domain.com { # 转发请求到Nest后端(假设Nest运行在3000端口) reverse_proxy localhost:3000 # 如果React是单独PM2运行在3001端口,添加以下规则处理静态资源 # handle /static/* { # reverse_proxy localhost:3001 # } # 自动申请HTTPS证书,填写你的邮箱 tls your-email@example.com }用PM2管理Caddy进程
打开管理员命令行,进入C:\Caddy目录,执行:pm2 start caddy.exe --name caddy -- run Caddyfile
方案二:使用Nginx反向代理
若熟悉Nginx,可选择该方案,需手动处理证书申请。
安装Nginx Windows版
下载解压到C:\nginx目录。用win-acme生成证书(无需IIS)
运行win-acme工具,选择N: Create new certificate (full options),按步骤操作:- 选择需要证书的域名
- 验证方式选
http-01 - 指定挑战文件存放目录(比如Nest的静态资源目录,确保Nest能访问该路径文件)
生成后,将fullchain.pem和privkey.pem复制到C:\nginx\conf目录。
配置Nginx
修改C:\nginx\conf\nginx.conf中的server块:server { listen 443 ssl; server_name your-domain.com; ssl_certificate C:/nginx/conf/fullchain.pem; ssl_certificate_key C:/nginx/conf/privkey.pem; # 转发请求到Nest后端 location / { proxy_pass http://localhost:3000; 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_set_header X-Forwarded-Proto $scheme; } # 若React静态文件单独部署,添加以下规则 # location /static { # root C:/path/to/react/build; # expires 30d; # } }用PM2启动Nginx
管理员命令行进入C:\nginx目录,执行:pm2 start nginx.exe --name nginx
方案三:直接在Nest.js中配置HTTPS
不推荐用于生产环境(证书续期繁琐,静态资源需额外处理),仅作临时方案参考:
生成证书
用win-acme手动模式生成证书,将fullchain.pem和privkey.pem放到Nest项目的安全目录(比如src/certs)。修改Nest启动文件
编辑src/main.ts:import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import * as fs from 'fs'; import * as path from 'path'; async function bootstrap() { const httpsOptions = { key: fs.readFileSync(path.join(__dirname, 'certs', 'privkey.pem')), cert: fs.readFileSync(path.join(__dirname, 'certs', 'fullchain.pem')), }; const app = await NestFactory.create(AppModule, { httpsOptions }); // 监听443端口需管理员权限 await app.listen(443); } bootstrap();重启PM2进程
pm2 restart your-nest-app-name
注意事项
- 确保Windows防火墙开放80(ACME证书验证)和443(HTTPS)端口。
- 用PM2运行需管理员权限时,右键命令提示符选择“以管理员身份运行”。
- 若React已打包,建议将静态文件放到Nest的
public目录,由Nest托管,减少反向代理配置复杂度。
内容的提问来源于stack exchange,提问作者Ayman Fahimi
相关产品推荐
相关产品推荐

