テスト用のサイトを3つ作ることになり、あまりお金をかけたくないということで、ELB(ALB)1つにサーバを2台で冗長化することになりました。
1つのALBに3つのサイト(URL)を設定する手順になります。
マルチサイト?ですね。
【環境】
・OS:Amazon Linux2
・Webサーバ:Nginx
・アプリ:Springbootを使って作成
※あまり本編とは関係ないですが、記載しました
構成図
・ALB1台
・サーバ2台
・ターゲットグループ3つ(サイトごと)
・ドメインはR53で作成
手順概要
- サーバ:アプリをサイトごとに配置
- サーバ:application.properties 修正(ポート、ログ出力場所の変更など)
- サーバ:Nginxのconfをサイト(サブドメイン毎)に分ける
- AWS:Target groupを作る(3つ)
- AWS:ALBを作る(1つ)
- AWS:R53でサブドメインを作る(3つ)
- AWS:ACMでSSL証明書を作成 (3つ)
- AWS:ALBにSSL証明書を設定
- AWS:ALBにターゲットグループを設定
手順
1.アプリをサイトごとに配置
EC2内にサイトごとにフォルダを作成し、そこにjarやapplication.propertiesを配置
2.application.properties 修正
ポートを分けます。
例えばサイト1が「8081」、サイト2が「8082」、サイト3が「8003」。
3.Nginxのconfをサイト(サブドメイン毎)に分ける
3-1. nginx.confのserver ディレクティブ(赤枠)を削除
# vim /etc/nginx/nginx.conf
3-2. サイトごとにconfファイルを作成する(今回は3サイトなので3ファイル作成)
# cd /etc/nginx
# cp -p nginx.conf.default conf.d/site1.conf
# vim /etc/nginx/conf.d/site1.conf
3-3. nginx.conf のフォーマットチェック
#nginx -t -c /etc/nginx/nginx.conf
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
↑syntax is ok、 successfulになっていることを確認
/etc/nginx/conf.d 配下のファイルも同様に確認
4.Target groupを作る(3つ)
AWSマネジメントコンソールから、ターゲットグループを選択し、3つ作成する。
※特に気を付けることは無いので手順は省略
3つのターゲットグループにEC2を2つずつ紐づけておく。
5.ALBを作る(1つ)
ALBを1作る。(細かい設定は最後に行い、ここでは作るだけ)
※手順は省略
6.R53でサブドメインを作る(3つ)
以下、ポイントです。
・サブドメインは3つ作るが、手順5で作成したALBを選択(全て同じ)
レコード名だけ異なり、他は全て同じ設定になります。
以下、手順のリンクです。
8.ALBにSSL証明書を設定
ポイントだけ手順を記載します。
1つのALBに複数のSSL証明書を付けれるの?と思っていましたが、できました。
8-1. AWSコンソールから対象のALBを選択し、リスナーの追加で「443」のポートを追加
・セキュリティポリシーは最新のものを選択
・デフォルトの証明書は手順7で作成したものの中から1つを選択
8-2. リスナータブから「証明書の表示/編集」をクリック
8-3. 「+」をクリック
8-4. ACMで作成した証明書の一覧がでるので、手順7で作成した証明書を2つ選択し、「追加」をクリック
※手順8-1で1つ証明書を追加したので、ここでは2つのみ追加
9.ALBにターゲットグループを設定
9-1. 以下の操作を実施する
9-2. 「+」をクリック
9-3. ホストヘッダー(赤枠)にサイトの手順6で作成したサブドメインを設定
※手順9-3 ~ 9-5 をサイト分(3回)繰り返すので、1回の手順では1つのみ設定
9-4. 手順4で作成したターゲットグループを赤枠に設定
9-5. 「保存」をクリック
※手順9-3 ~ 9-5 をサイト分(3回)繰り返す。
設定としては以上となります。
上記の手順で実装はできたのですが、こうした方が良いのでは?などアドバイス頂けると嬉しいです。