ELB+APacheでhttpsへリダイレクトをしたい
Last-modified: Sun, 18 Dec 2016 17:05:13 JST (2949d)
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: 2839,
today: 1,
yesterday: 1
このページの参照回数は、2839です。