ELB+APacheでhttpsへリダイレクトをしたい
Last-modified: Sun, 18 Dec 2016 17:05:13 JST (3256d)
Top > ELB+APacheでhttpsへリダイレクトをしたい
- ELBでHTTPSを終端し、バックエンドのApacheへはPort80で飛ばす。というのはよくある構成なのですが、ApacheやPHPでうかつにhttpsにリダイレクトさせると、リダイレクトループが発生します。参考

何故かというと、ELBの前はhttpで来ても、https出来ても、バックエンドのApacheへはhttpで来るので、そのままだとバックエンドのApacheへはhttpsで来ることがないからです。
では、バックエンドはどうやってフロントにhttpsで来たかを知るのかというと、Apacheの環境変数HTTP:X-Forwarded-Portに来たポート番号が入っているので、これを見てリダイレクトをかけます。
また、ELBはバックエンドのサーバが死んでいないかの監視のため、ヘルスチェックを行っています。
これをリダイレクトしてしまうとヘルスチェックに失敗しELBからEC2が切り離されますので、リダイレクト対象から除外します。
RewriteEngine On
# ELB配下なので、環境変数を見てリダイレクトさせる
RewriteCond %{HTTP:X-Forwarded-Port} !^443$
# ELBのヘルスチェックは除外
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
# HTTPSへリダイレクト
RewriteRule ^(.*)$ https://%
{HTTP_HOST}%{REQUEST_URI} [R=301,L]
なお、[R=301,L]とかの説明は以下のサイトが詳しい。
apache :: Rewrite(mod_rewrite)
Counter: 3226,
today: 1,
yesterday: 1
このページの参照回数は、3226です。