LoginSignup
0
0

はじめに

Virtual Hostの知識を深めるためにAWSにてALB ACMのApacheの検証をしてみました。
よくRoute53経由でALBにアクセスするケースはセキュリティグループの設定不足や
サブネットの設定により、アクセス出来ないことがよくあります。

ドメインについては例で「example.com」で記載させていただいております。

本記事はセキュリティグループルールやサブネットについて特に詳細に記載しようと思います。

以下のサイトを参考に構築しました。
https://qiita.com/sugimount-a/items/7e5ebd390cb59c3e55da

前提条件

例 「example.com」のドメインをお名前.com等で発行済みであり、
 Route53のレコードに登録済みであること
ドメインを発行していない場合は使用することは出来ません。

検証手順

1 EC2を作成する

EC2はパブリックサブネット上で作成しました。パブリックアドレスは有効にして付与しました。

image.png

EC2のセキュリティグループについて

自分のIPアドレスの22ポートを許可しないとEC2にSSH接続出来ません。
自分のIPアドレスの80ポートを許可してhttp://EC2のパブリックIPアドレスでアクセス出来る様にする。

以下はルール許可はよく設定を忘れるため、記載しました。
赤枠のルールについては、ALB作成後追加いたしました。
追加した理由としては、今回ALBでSSLを終端してALBからEC2への通信は80ポートで行うため、ALBのセキュリティグループを80ポートでEC2のセキュリティグループのインバウンドルールで許可する必要がある。許可しない場合はALBからEC2へアクセス出来ません。

image.png

2 EC2にSSH接続してコマンドを実行する

httpdのパッケージをインストールする。

# sudo su -
# dnf install httpd

httpdサービスを起動した後、httpdサービスがEC2再起動時に自動起動する設定にする。

# systemctl start httpd
# systemctl enable httpd

タイムゾーンを日本時間に変更しました。

rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ブラウザでEC2のパブリックIPアドレスで接続しました。
※以下の例はtest1と表示される設定にしております。
image.png

3 ACMをリクエストして証明書を発行する。

パブリック証明書をリクエストの手順を参照ください

ACM >> 証明書を一覧 >> リクエストを選択する

image.png

以下の設定内容を入力してACM証明書を発行してください。
image.png

2つのドメイン名でACM証明書を発行しました。
image.png

4 Target Groupを作成する

ターゲットグループは以下の設定で作成しました。

image.png

ヘルスチェックの設定
image.png

5 ALBを作成しました

ALBを自席PCからアクセスする場合はインターネットを経由する場合は、
ALBのサブネットを必ずパブリックサブネットにしてください

ALBをプライベートサブネットを選択したら自席PCからALBにアクセス出来ません。
仮にターゲットグループのEC2がプライベートサブネットに配置されていても、ALBは
自席PCからアクセスする場合はALBのサブネットはパブリックサブネットにしてください。

image.png

リスナーは443を指定して、先程作成したtest-tgのターゲットグループを指定する。
ACMは先程発行した証明書「test1.example.com」を選択する。
image.png

リスナールールのSNIにてtest2.example.comの証明書を追加する。

test1.example.comの証明書についてはリスナー設定時にSNIに自動登録されます。

image.png

ロードバランサーのセキュリティグループについては、Route53からALBへアクセスする場合はデフォルトルート0.0.0.0/0を許可する必要があります。
※理由はRoute53はグローバルサービスでRoute53のIPアドレスが不明なため、0.0.0.0/0ですべてのIPアドレスを許可します。

※Route53経由せずに直接ALBに自席PCからアクセスする場合は、自席PCのIPアドレスに対して443ポートを許可してあげればよいです。

image.png

ターゲットグループのヘルスチェックを確認した

ALBのヘルスチェックがEC2に届いていることを確認した。
仮に以下のアクセスログにてALBのヘルスチェックのログが出力されていない場合は、
EC2のセキュリティグループの設定でALBを許可していない可能性があります。

tail -n 4 /var/log/httpd/access_log
10.0.107.4 - - [16/Dec/2023:01:55:32 +0000] "GET / HTTP/1.1" 200 43 "-" "ELB-HealthChecker/2.0"
10.0.15.159 - - [16/Dec/2023:01:55:36 +0000] "GET / HTTP/1.1" 200 43 "-" "ELB-HealthChecker/2.0"
10.0.107.4 - - [16/Dec/2023:01:56:02 +0000] "GET / HTTP/1.1" 200 43 "-" "ELB-HealthChecker/2.0"
10.0.15.159 - - [16/Dec/2023:01:56:06 +0000] "GET / HTTP/1.1" 200 43 "-" "ELB-HealthChecker/2.0"
10.0.107.4 - - [16/Dec/2023:01:56:32 +0000] "GET / HTTP/1.1" 200 43 "-" "ELB-HealthChecker/2.0"

ヘルススタータス「healthy」であることを確認しました。
image.png

Route 53のAレコードを追加する。

ロードバランサーをエイリアスで指定して作成する
image.png

Virtual Host の指定

Virtual Hostを新規に作成する。

[root@ip-10-0-4-249 httpd]# cat /etc/httpd/conf.d/virtualhost.conf
<VirtualHost *:80>
    ServerName test1.example.com
    DocumentRoot /var/www/test1

    <Directory /var/www/test1>
        Options -Indexes
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName test2.example.com
    DocumentRoot /var/www/test2

    <Directory /var/www/test2>
        Options -Indexes
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

フォルダを作成した

mkdir /var/www/test1
mkdir /var/www/test2

サンプルのindex.htmlを作成する。

vi /var/www/test1/index.html
<html><body><h1>test1!!</h1></body></html>
vi /var/www/test2/index.html
<html><body><h1>test2!!</h1></body></html>

httpdの文法チェックをする

httpd -t
OK 

httpdのサービスを再起動する

systemctl restart httpd

動作確認

https://test2.example.com

image.png

https://test1.example.com

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0