[express] AWS App Runnerで正しいprotocolを取得する[小ネタ]

2021.12.02

App RunnerはWebアプリ実行に必要なネットワークやLB設定などを
フルマネージドに提供してくれるサービスです。
GithubリポジトリにWebアプリのコードを用意しておけば、
それを自動でデプロイしてくれてドメインも割当てしてくれます。

※もう少し詳しいApp Runner記事はここ参照

正しいprotocolが取得できない

node + expressアプリの動作検証のため、
3000番ポートで起動するように設定し、App Runnerで自動デプロイしました。
そして、httpsのデフォルトドメインが割り当てられました。 
サンプルのソースは↓です。

const express = require('express');
const app = express();

app.get('/', function (req, res) {
  //httpが表示される
    console.log("protocol : " + req.protocol);
  res.send('Hello App Runner');
});

app.listen(3000);

割り当てられたドメインにアクセスすると、protocolが常にhttpで表示されてしまいます。

trust proxy で解決

App RunnerによってデプロイされたWebアプリはLBの後ろで動いているので、
app.enableでtrust proxyをセットしてあげればOK。

・・・
const app = express();
app.enable('trust proxy');
・・・

これで正しいprotocolが取得できます。

Reference