【AWS/ELB】http→httpsのリダイレクト設定について【htaccess】
※本ページのリンクにはプロモーションが含まれています。
こんにちは、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]
ただ、タイトルからお察しの通り、この方法ではうまくリダイレクトしません。普段使っているサーバーとの違いは、サーバーへのアクセスにロードバランサーを経由しているくらいなので、それが原因なのかな~と漠然と考えていました。
なので、AWSのサポートにアクセスして調べることに。
AWSのナレッジセンターに答えが!
見つけたアンサーがこちら。
要するに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のリダイレクト設定についてのご紹介でした!