ELB+APacheでhttpsへリダイレクトをしたい

Last-modified: Sun, 18 Dec 2016 17:05:13 JST (306d)
  • 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: 373, today: 1, yesterday: 2

このページの参照回数は、373です。