ALBのホストヘッダーベースのルーティングをやってみた
はじめに
URLのホスト名毎に通信するサーバーを切り替えたいということがありました。
イメージとしては
FQDNを aaa.example.com
に指定してアクセスするとサーバーA
FQDNを bbb.example.com
に指定してアクセスするとサーバーB
に繋がって欲しいといったイメージです。
やってみた
構成図
今回やりたいことを構成図にすると以下のようなイメージになります。
前提として example.com
というドメインを取得してRoute53でホストゾーンとして登録しています。
ACMの作成
今回ACMで発行するパブリック証明書は example.com
と *.example.com
です。
サブドメイン用にワイルドカードも作成しておきます。
ALBの作成
ALBを作成します。
今回はリスナールールの検証なので、リスナールール以外は基本デフォルトで作成しています。
リスナールールのデフォルトアクションのみ固定レスポンスで404を返すように設定してあります。
この後に追加する2つのホストへアクセスができなかった場合にNot Foundを返します。
リスナールールの追加
リスナールールを追加していきます。
対象のリスナー > ルールを追加する の順でルールを追加します。
ルール名を入力して条件を追加します。
今回は aaa.example.com
がホストヘッダーに含まれて入ればルーティングするように設定します。
ルールの条件タイプ:ホストヘッダー
ホストヘッダー:aaa.example.com
今回は検証のため後続のEC2は作らずに固定レスポンスを返すように設定します。
優先度は100としておきます。
これでルールを追加します。
同じようにサーバーBのルールも作成します。
これでALBの設定は完了です。
Route53への登録
作成したALBへ名前解決するためにRoute53へレコードを追加します。
examole.com
と *.example.com
のAレコードを作成します。
検証
では準備が整ったのでアクセスしてみましょう。
まずはサーバーAから
$ curl https://aaa.example.com
Server A
想定通りホスト名を aaa
に設定するとサーバーAにルーティングされました。
同じようにサーバーBも確認します。
$ curl https://bbb.example.com
Server B
サーバーBもルーティングされることが確認できました。
ちなみにどちらにも当てはまらない場合はNot Foundが返ってきます。
$ curl https://example.com
Not Found
おわりに
ALBのホストヘッダーベースのルーティング機能を使えば、異なる目的のアプリケーションをサブドメインで分けて公開することができることがわかりました。
今回はホストヘッダーベースでしたが、ALBではパスベースでルーティングすることもできます。
単一ドメインで複数のアプリケーションを管理する必要がある場合はパスベースルーティングが適しています。