Database JUNKY

MySQL,MariaDBを中心としたブログです

AWS ELB だけでwwwあり・なしを統合!そして全てhttpsに統一する方法を教えます!

nginxでのの方法については、わかったのですが、ELBを挟んだ場合は、どこでどのような設定をする必要があるのか、、頭がごちゃごちゃになりハマったのでここで整理します

やりたいことは、以下の通り

f:id:hit10231023:20180814180809j:plain

ここまでやれば、ドメインを統一することにより、SEO的に良さそうな感じなのですが、これを、ELB内部だけで完結するのが、以前はかなり困難だったのです。。(だったはず。。。) これ、いつの間にか、このようなケースの設定もELBでできるようになっておりました!!!

以前のELBの問題とは?

サーバーのHTTPトラフィックをロードバランサのHTTPSにリダイレクトするにはどうすればよいですか? になんか、難しく書いてありますが、まとめると、httpからhttpsにリダイレクトする場合は、リダイレクトループされる可能性があるよってことを書いているのだと思います。 よって。昔は、WEBサーバ側で、リダイレクトの設定をしていたんですよね。。

でも、これ、もう機能として、ELBでサポートされているかもよ!というのが今回のお話になります

 設定手順

作業の要は、route53とELBです。少々遠回りしますが、まずは基本的な設定について説明していきます。

ELBの設定

まず、最初に考えるのは、https://www.test-test-abc のこごだけです! また、今回、転送先のwebサーバのlistenポートは、8080と過程します。ちなみに当方のnginxの設定は以下の通りです。

server {
    listen       8080 default_server;
    server_name  www.test-test-abc;
    root /var/www/html;

ec2メニューからロードバランサーを選択

f:id:hit10231023:20180814182346j:plain

ロードバランサーの作成をクリック

f:id:hit10231023:20180814182518j:plain

Application Load Balancerを選択

f:id:hit10231023:20180814182701j:plain

リスナーの設定

名前とhttpsを設定します。インターネット向け・内部に関してはおのおのの環境に合わせてください

f:id:hit10231023:20180814191425j:plain

当方は、インターネット向けを選択しております

f:id:hit10231023:20180814191738j:plain

アベイラビリティゾーンは2つ以上選択する必要があります。

f:id:hit10231023:20180814191833j:plain

インターネットゲートウェイを指定してあるサブネットを選択しております

f:id:hit10231023:20180814192009j:plain

セキュリティ設定の構成

httpsをlistenしますので、証明書が必要になります。今回は、ACMを利用しました。ACMの説明は今回割愛します

f:id:hit10231023:20180814192203j:plain

セキュリティグループの設定

f:id:hit10231023:20180814192307j:plain

ターゲットグループの作成

今回listenしているサーバポートは8080なので、以下のように設定しております

f:id:hit10231023:20180814192445j:plain

ターゲットの登録

上記にて、「ターゲットの登録」ボタンをクリックしますと、下記画面になります

f:id:hit10231023:20180814192646j:plain

ターゲットの登録が終わりますと、画面上部にリスト表示されます

f:id:hit10231023:20180814192806j:plain

基本的なELBの登録は以上になります。

登録結果

再度マネージメントコンソールのロードバランサーを見ると結果が確認できます。この中に含まれるDNS名は、後のroute53で設定するため利用します

f:id:hit10231023:20180814192922j:plain

リスナータブ

f:id:hit10231023:20180814193335j:plain

リスナータブの中にある、「ルールの表示/編集」をクリックします

f:id:hit10231023:20180814193531j:plain

ルールの表示確認

以下のようになっているはずです。簡単に説明すると、httpsリクエストがあった場合、pot:8080のターゲットグループにリクエストを転送するよーっていう意味です

f:id:hit10231023:20180814193618j:plain

ターゲットグループのリンクをクリックしてみてください

f:id:hit10231023:20180814193824j:plain

ターゲットグループの確認画面

ターゲットグループは、転送先のインスタンス情報が入っております。もともとロードバランサーなので、このグループ内で、複数のインスタンスを追加することで本来のロードバランシングができるわけですが、今回やりたいのは、負荷分散ではなくドメイン統合なので1台のみにしております

f:id:hit10231023:20180814193919j:plain

f:id:hit10231023:20180814194254j:plain

route53の設定

次は、route53の設定です。

www.test-test-abc

CNAMEでELBで設定した DNS名を指定します

f:id:hit10231023:20180815131151j:plain

これでひとまず、https://www.test-test-abc は、アクセスできるようになりました。

wwwなしのリダイレクト設定

本題のwwwあり、なしでも、https://wwwにアクセスする設定です

おさらいしますと。

実現したいのは、この部分なので

f:id:hit10231023:20180814180809j:plain

このあたりを順に記載していきます。

http://www.test-test-abc -> https://www.test-test-abc の設定

リスナーの追加

前回作成した、elbの設定画面にて、リスナーの追加をクリック

f:id:hit10231023:20180815171332j:plain

以下のように設定を追加します。

f:id:hit10231023:20180815171902j:plain

リスナーにHTTP:80が追加されたと思います

f:id:hit10231023:20180815172148j:plain

これにより、

http://www.test-test-abc のリクエストは、全て、https://www.test-test-abc に転送されるようになりました

http://test-test-abc -> https://test-test-abc の設定

では、wwwなしのwww付き転送は、どうすればいいか?

上記の設定の話になります

route53の設定

あ、忘れてました、wwwとwww無しとは別に、dnsレコードの設定をする必要がありますが、CNAMEでの登録することはできません 以下の通り、AレコードでエイリアスでELBのDNSを設定します

f:id:hit10231023:20180815184406j:plain

再びELBの設定

再び、ELBの設定になります

ルールをさらに1つ追加し、httpsのリダイレクトに設定します

f:id:hit10231023:20180815184919j:plain

これは、port:443、つまり以下のように

https://test-test-abc のみを想定したルールの設定です。

port : 80のルールはなぜ、追加しないのか?ですが、これは、PORT:80のリクエストは、どんなドメインであろうと、https://test-test-abc に強制的にリダイレクトされるので、あえて設定する必要がないからです

f:id:hit10231023:20180815185139j:plain

以上です!!

WEBサーバ側で小細工をしなくても、ELBでルーティングの設定がほとんど行えるのはかなり魅力ですよね!!

わたし的には、インスタンスが一台でも、ELBを活用することをお勧めします!

でわでわ!

f:id:hit10231023:20180309123622p:plain