ALBを利用した常時SSLの設定


1. ALBでの設定

  • 「EC2」のサービスを選択します。
  • 「ロードバランサー」を選択します。
  • 「リスナー」タブを指定します。
  • 「HTTP:80」の行の「ルールの表示/編集」リンクをクリックします。
  • 「ルールの追加」の「+」ボタンをクリックします。
  • 「ルールの挿入」をクリックします。
IF THEN
1 パス...
=「*」
1. リダイレクト先...
「HTTPS」「443」
「デフォルトホスト、パス、クエリを使用...」
「301 - 完全に移動されました」
最後 それ以外の場合はルーティングされないリクエスト (ターゲットグループ)

  • 右上の「保存」ボタンをクリックします。

2. EC2での.htaccessの設定

※ALBで設定できるようになったので、現在この方法では行いません!
ALBからEC2の通信には「http」を使用します。
そこで、EC2のドキュメントルートに「.htaccess」を設置する必要があります。

RewriteEngine On
 
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !xxx.xxx.xxx.xxx
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
ALBからEC2には、正常に稼働しているかどうか定期的にヘルスチェックが行われていますが、そのままリダイレクトするとレスポンスコードが「301」になって、正常に判定されません。
そこで、ユーザエージェントが「ELB-HealthChecker」だったら、リダイレクトを除外します。

RewriteCond %{HTTPS} !=on
ALBからEC2は常に「http」で通信されていますので、この記述はなくてもOKです。

RewriteCond %{HTTP_HOST} !xxx.xxx.xxx.xxx
EC2に直接アクセスしたい場合に、EC2のElastic IPアドレスを指定します。
これで「http://xxx.xxx.xxx.xxx」で、EC2に直接アクセスできます。

RewriteCond %{HTTP:X-Forwarded-Proto} !=https
HTTPヘッダーX-Forwarded-Protoは、ELBからEC2へ通信する際に付与されるヘッダー情報で、クライアントからALBへの通信プロトコルを判定しています。



タグ:

AWS ALB 常時SSL
最終更新:2020年10月26日 07:51