AWS ELB だけでwwwあり・なしを統合!そして全てhttpsに統一する方法を教えます!
nginxでのの方法については、わかったのですが、ELBを挟んだ場合は、どこでどのような設定をする必要があるのか、、頭がごちゃごちゃになりハマったのでここで整理します
やりたいことは、以下の通り
- http://www.test-test-abc/ → https://www.test-test-abc
- http://test-test-abc/ → https://www.test-test-abc
- https://test-test-abc/ → https://www.test-test-abc
ここまでやれば、ドメインを統一することにより、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メニューからロードバランサーを選択
ロードバランサーの作成をクリック
Application Load Balancerを選択
リスナーの設定
名前とhttpsを設定します。インターネット向け・内部に関してはおのおのの環境に合わせてください
当方は、インターネット向けを選択しております
アベイラビリティゾーンは2つ以上選択する必要があります。
インターネットゲートウェイを指定してあるサブネットを選択しております
セキュリティ設定の構成
httpsをlistenしますので、証明書が必要になります。今回は、ACMを利用しました。ACMの説明は今回割愛します
セキュリティグループの設定
ターゲットグループの作成
今回listenしているサーバポートは8080なので、以下のように設定しております
ターゲットの登録
上記にて、「ターゲットの登録」ボタンをクリックしますと、下記画面になります
ターゲットの登録が終わりますと、画面上部にリスト表示されます
基本的なELBの登録は以上になります。
登録結果
再度マネージメントコンソールのロードバランサーを見ると結果が確認できます。この中に含まれるDNS名は、後のroute53で設定するため利用します
リスナータブ
リスナータブの中にある、「ルールの表示/編集」をクリックします
ルールの表示確認
以下のようになっているはずです。簡単に説明すると、httpsリクエストがあった場合、pot:8080のターゲットグループにリクエストを転送するよーっていう意味です
ターゲットグループのリンクをクリックしてみてください
ターゲットグループの確認画面
ターゲットグループは、転送先のインスタンス情報が入っております。もともとロードバランサーなので、このグループ内で、複数のインスタンスを追加することで本来のロードバランシングができるわけですが、今回やりたいのは、負荷分散ではなくドメイン統合なので1台のみにしております
route53の設定
次は、route53の設定です。
www.test-test-abc
CNAMEでELBで設定した DNS名を指定します
これでひとまず、https://www.test-test-abc は、アクセスできるようになりました。
wwwなしのリダイレクト設定
本題のwwwあり、なしでも、https://wwwにアクセスする設定です
おさらいしますと。
実現したいのは、この部分なので
このあたりを順に記載していきます。
http://www.test-test-abc -> https://www.test-test-abc の設定
リスナーの追加
前回作成した、elbの設定画面にて、リスナーの追加をクリック
以下のように設定を追加します。
リスナーにHTTP:80が追加されたと思います
これにより、
http://www.test-test-abc のリクエストは、全て、https://www.test-test-abc に転送されるようになりました
http://test-test-abc -> https://test-test-abc の設定
では、wwwなしのwww付き転送は、どうすればいいか?
- http://test-test-abc/ → https://www.test-test-abc
- https://test-test-abc/ → https://www.test-test-abc
上記の設定の話になります
route53の設定
あ、忘れてました、wwwとwww無しとは別に、dnsレコードの設定をする必要がありますが、CNAMEでの登録することはできません 以下の通り、AレコードでエイリアスでELBのDNSを設定します
再びELBの設定
再び、ELBの設定になります
ルールをさらに1つ追加し、httpsのリダイレクトに設定します
これは、port:443、つまり以下のように
https://test-test-abc のみを想定したルールの設定です。
port : 80のルールはなぜ、追加しないのか?ですが、これは、PORT:80のリクエストは、どんなドメインであろうと、https://test-test-abc に強制的にリダイレクトされるので、あえて設定する必要がないからです
以上です!!
WEBサーバ側で小細工をしなくても、ELBでルーティングの設定がほとんど行えるのはかなり魅力ですよね!!
わたし的には、インスタンスが一台でも、ELBを活用することをお勧めします!
でわでわ!