こんにちは、Ryohei(@ityryohei)です!

本記事では、AWSのELBにおけるhtaccessを使用したhttp→httpsのリダイレクト設定についてご紹介しています。

AWSのELBでアクセスを振り分けてるんだけど、ロードバランサー経由のアクセスをhttpからhttpsにリダイレクトするにはどうすればいいの?

上記の疑問にお答えします。

Apacheの基本的なhttp→httpsへのリダイレクト設定

Apacheでは基本的に下記の方法で全ページのリダイレクトが可能です。仕事で愛用しているグローバルサインのサポートサイトにも記載があるので間違いありません!

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

参考サイト:https://jp.globalsign.com/support/allssl/552.html

ただ、タイトルからお察しの通り、この方法ではうまくリダイレクトしません。普段使っているサーバーとの違いは、サーバーへのアクセスにロードバランサーを経由しているくらいなので、それが原因なのかな~と漠然と考えていました。

なので、AWSのサポートにアクセスして調べることに。

AWSのナレッジセンターに答えが!

見つけたアンサーがこちら。

https://aws.amazon.com/jp/premiumsupport/knowledge-center/redirect-http-https-elb/

要するにELB経由でアクセスした場合は直接http→httpsのリダイレクトはできない(リダイレクトループになる)ので、X-Forwarded-Proto ヘッダーでHTTPクライアントだけをリダイレクトするように書き換えルールを設定する必要があるとのことです。なるほど…!

参考ページに X-Forwarded-Proto ヘッダーを追加した設定のサンプルが記載されていたので、さっそく試してみます。

http→httpsにリダイレクトする

ナレッジセンターで得た貴重な情報を頼りに主に使用されるリダイレクト設定を試してみます。

とりあえず全ページをhttpsにリダイレクト

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

wwwなしに統一してhttpsにリダイレクト

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

wwwありに統一してhttpsにリダイレクト

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

それぞれ上記の方法で無事にリダイレクトを設定することができました。めでたしめでたし!

最後に

AWSに関する情報はナレッジセンターに掲載されていることが多くあるので、いつも参考にさせてもらっています。もし欲しい情報がナレッジセンターに存在しなくてもインターネット上に情報を公開してくれているエンジニアの方がたくさんいるので、参考にしてみてくださいね!

以上、AWSのELBにおけるhtaccessのhttp→httpsのリダイレクト設定についてのご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。