ロードバランサーの後ろにAmazon Lightsailを配置して常時SSL対応する

Apacheの設定ファイルを久々にいじったので備忘として。

やりたいこと

  1. AWS Lightsail でWordPressをインストールしたインスタンスを立てる
  2. インスタンスの手前にロードバランサー (Lightsail) を立て、ターゲットをインスタンスに向ける
  3. HTTPアクセスが発生した場合はHTTPSにリダイレクトさせる

やりたかったこと・やったこと

ALBであればHTTPSのリスナーのみを作成するだけで事足りる(そもそもHTTPを空けない)のですが、Lightsail で立てたロードバランサーではデフォルトでHTTPも空いてしまうようでした。

あるいは、HTTPをHTTPSにリダイレクトするという設定のみでできますが、そこまで細かい設定はできないようです。

以下はCLBの例ですが、ロードバランサーで設定ができないようであればWebサーバーで設定する必要があります。

ELB を使用して HTTP トラフィックを HTTPS にリダイレクトする
私は Classic Load Balancer で HTTP と HTTPS リスナーを使用しています。Classic Load Balancer は SSL をオフロードし、バックエンド接続は単一の HTTP ポート (ポート 80) ...

Lightsailであれば /opt/bitnami/apache/conf/vhosts あたりに設定ファイルがあるので、VirtualHostセクションの中に以下の記述をすればOKです。

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

ちなみにここで言っている X-Forwarded-Protoヘッダはロードバランサーへアクセスされたプロトコルが入ってくるみたいです。

HTTP ヘッダーと Application Load Balancer - Elastic Load Balancing
Elastic Load Balancing の X-Forwarded リクエストヘッダーについて説明します。
タイトルとURLをコピーしました