You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nest.js+React.js应用PM2部署下开启HTTPS的实现方法咨询

在Windows+PM2环境下为Nest.js+React应用开启HTTPS

下面提供两种可行方案,优先推荐反向代理模式,更易维护和扩展。

方案一:使用反向代理(推荐,以Caddy为例)

Caddy支持自动申请和续期Let's Encrypt证书,配置简单,适配Windows环境。

  1. 安装Caddy
    下载Windows版Caddy,解压到C:\Caddy目录。

  2. 编写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
    }
    
  3. 用PM2管理Caddy进程
    打开管理员命令行,进入C:\Caddy目录,执行:

    pm2 start caddy.exe --name caddy -- run Caddyfile
    

方案二:使用Nginx反向代理

若熟悉Nginx,可选择该方案,需手动处理证书申请。

  1. 安装Nginx Windows版
    下载解压到C:\nginx目录。

  2. 用win-acme生成证书(无需IIS)
    运行win-acme工具,选择N: Create new certificate (full options),按步骤操作:

    • 选择需要证书的域名
    • 验证方式选http-01
    • 指定挑战文件存放目录(比如Nest的静态资源目录,确保Nest能访问该路径文件)
      生成后,将fullchain.pem和privkey.pem复制到C:\nginx\conf目录。
  3. 配置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;
        # }
    }
    
  4. 用PM2启动Nginx
    管理员命令行进入C:\nginx目录,执行:

    pm2 start nginx.exe --name nginx
    

方案三:直接在Nest.js中配置HTTPS

不推荐用于生产环境(证书续期繁琐,静态资源需额外处理),仅作临时方案参考:

  1. 生成证书
    用win-acme手动模式生成证书,将fullchain.pem和privkey.pem放到Nest项目的安全目录(比如src/certs)。

  2. 修改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();
    
  3. 重启PM2进程

    pm2 restart your-nest-app-name
    

注意事项

  • 确保Windows防火墙开放80(ACME证书验证)和443(HTTPS)端口。
  • 用PM2运行需管理员权限时,右键命令提示符选择“以管理员身份运行”。
  • 若React已打包,建议将静态文件放到Nest的public目录,由Nest托管,减少反向代理配置复杂度。

内容的提问来源于stack exchange,提问作者Ayman Fahimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:57:12