AWSのALBを使っている場合のHTTPからHTTPSへのURL転送方法

Amazon Web ServicesにALB(Application Load Balancer)が導入されました。

このALB、外から来たHTTPリクエストのSSLを解除して、ALBとWebサーバの間をHTTP通信に変更する機能があるのですが、その影響で、ALBとクライアントの通信がHTTPだろうがHTTPSだろうが、WebサーバにとってはHTTP通信のように見えてしまいます。そのため、ALBを意識していない設定では、リダイレクトループに陥ってしまいます。

ALBを通してもちゃんと動く例

以下のように設定すると、ALBを通してSSLが解除されている場合も、元のプロトコルにて正しく判定されます。2行目はALBを通さず直接リクエストを受けた場合の判定、3行目ALBを通してアクセスした場合の判定で、これらの条件を両方満たしている場合のみhttps://のURLにリダイレクトします。

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

Follow me!