AWS-NLBでwwwありなし・HTTP/HTTPS通信に強制リダイレクトする方法(Network Load Balancer)

  • 21 January 2022
Post image

 AWSのALB(Application Load Balancer)を使って、HTTPS強制や、wwwありなし強制のリダイレクトを行うと思われる。その場合特に難しいことはなくそのための情報も腐るほど出てくる。ALBは料金も少し安いし通常はこのALBを使用すると思われる。


ALBが使えないケース(Route53が使えない)

 しかし、ALBを使用できないケースもある。それは、NS(ネームサーバー)をRoute53に設定できない時だ。Route53以外でDNSを設定する場合、ALBへのルーティングはCNAMEを設定せざるを得ない。しかし、例えば、WEBサーバーをドメインaaa.comとwww.aaa.comで運用したい場合(wwwなしをwwwありにリライトして)、「aaa.com」はCNAMEを設定できないのだ。DNSの仕組み上不可能である。そのため、独自ドメイン(aaa.com)をALBへ向けることができないのだ。(自分が知らないだけで、外部NSでALBを運用する方法があるのかもしれないが)

 こういう場合は、NLB(Network Load Balancer)を利用すれば、リダイレクトを実現することができる。このNLBの情報があまり引っかからないので紹介する。ちなみに今回は「wwwありSSL通信」へリダイレクトするケースを紹介する。

NLB

NLB、NginxでSSL通信

 NLBでは、 ロードバランサに対してStaticIPアドレスを設定できる。そのため、DNSにwwwなしもwwwありもAレコードで設定できNLBに向けることができる。しかもAWSのACMによってSSL証明書をセットしてhttps通信も簡単にできる。以下のイメージだ。

NLB

 そして、Webサーバー側は80ポートで受けるので、ロードバランサではなくNginxでHTTP通信をHTTPS通信へリダイレクトするはずだ。ググると以下のconf設定がよく出てくる。

if ($http_x_forwarded_proto != https){
   return 301 https://$host$request_uri;
}

 しかし、これはALB用の書き方で、NLBではうまくできない!!


NLB+NginxでHTTPをHTTPSへリダイレクト

 いろいろ調べたが、以下のようにすれば解決。同じ方法でApacheでも可能だ。


1. EC2に設定しているセキュリティグループのインバウンドで80と8080を許可する。

NLB

2. 80ポートで待ち受けるEC2のターゲットと8080ポートで待ち受けるEC2のターゲットにしたターゲットグループを2つ作成する。

NLB

3. NLBのリスナーで【443】を【80のターゲット】に、【80】を【8080のターゲット】に設定。

NLB

4. Nginxのconfで8080ポートを以下のように設定する。

server {
     listen 8080;
     server_name _;
     root /usr/share/nginx/html;

     if ($http_user_agent !~* ELB-HealthChecker){
         return 301 https://$host$request_uri;
     }
}

 これにより、NLBへのHTTP(80)通信をNginxの8080ポートへ流し、443へ強制的にリダイレクトできる。このとき、LBのヘルスチェックの時だけは200をリターンできるようにしておく。


wwwありなしリダイレクトは普通のやり方で

 nginxだと以下のようにやれば普通にできる。

server {
    listen       80;
    server_name  aaa.com;
    return       301 $scheme://www.aaa.com$request_uri;
}

まとめ

 今回のようなケースは、例えばお客さんがお名前.comでドメインを取得していて、メールアドレスのためのMXレコードを既に設定済みのためRoute53へネームサーバーを移したくないとごねられたときなんかが該当する。また、異様にAWSを毛嫌いしているおじさんが担当で、せめてNSだけはAWSにしたくないとの主張をお持ちのケースも考えられる。

 ALB+Route53なら簡単にできるところをわざわざNLBを使用するというケースの紹介だ。

You May Also Like

非認証APIのアクセス対策(粗大ごみセンターのシステムの例)

非認証APIのアクセス対策(粗大ごみセンターのシステムの例)

 前回の記事で書いたとおり、全くユーザーが動作させる機能がないようなコーポレートサイトやLPサイトは静的サイトで作成するほうが、あらゆる面でメリットがある。ところがそれら以外の普通のWEBシステムでは、バックエンドでの動的な処理が必要なはずだ。今回はそのセキュリティの話。 バックエ …

静的サイトホスティングは万能か?

静的サイトホスティングは万能か?

 WEBサイトって一般的にブラウザがHTMLやCSS、Js、その他画像などのファイルを読み込んで描写されているものを言うよね?一方Webサイトを作成するには、Webサーバーが必要という。特に有名なCMSであるWordPressではサーバーでPHPやデータベースが動作してサイトが構築 …