コンテンツにスキップ

NestJS で HTTPS 通信に対応する

HTTPS & Multiple Servers - FAQ | NestJS - A progressive Node.js framework

環境変数からファイルを指定できるとなお良し。

src/main.ts
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import { NestApplicationOptions, ValidationPipe } from "@nestjs/common";
import { NestFactory } from "@nestjs/core";
import * as fs from "fs";
import { AppModule } from "./app.module";

async function bootstrap() {
  const options: Partial<NestApplicationOptions> = (() => {
    if (process.env.HTTPS_KEY) {
      console.log("Run on HTTPS");
      return {
        httpsOptions: {
          key: fs.readFileSync(process.env.HTTPS_KEY),
          cert: fs.readFileSync(process.env.HTTPS_CERT),
        },
      };
    }
    console.log("Run on HTTP");
    return {};
  })();
  const app = await NestFactory.create(AppModule, options);
  // リクエストのバリデーションチェックをグローバルに有効にする
  // `transform: true`でオブジェクトをDTOに変換する
  app.useGlobalPipes(new ValidationPipe({ transform: true }));
  app.enableCors();
  await app.listen(parseInt(process.env.PORT));
}
bootstrap();
.env.development.local
1
2
3
4
PORT=3000
# 中略
HTTPS_KEY=/home/{ユーザー名}/server.key
HTTPS_CERT=/home/{ユーザー名}/server.crt