AWS ELB+Apacheで外部からのhttpアクセスのみhttpsへリダイレクトする
ただリダイレクトするだけだとリダイレクトループとなる
Apacheを使ってのhttpからhttpsへのリダイレクト手順は検索すると以下のような物が出てきます。
1 2 3 |
RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] |
HTTPS以外からのアクセスがあったらHOSTとURI情報はそのままにhttpsへリダイレクトする設定ですね。
ELBを使っている場合のHTTP->HTTPSリダイレクトの書き方
ELB経由でアクセスする場合、外部からアクセスがあったのかという点と、ヘルスチェックからのアクセスかという点を考慮する必要があります。
1 2 3 4 5 6 |
RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Port} !^443$ RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker RewriteCond %{REQUEST_URI} !=/server-status RewriteCond %{HTTP:X-FORWARDED-FOR} !^$ RewriteRule ^(.*)?$ https://%{HTTP_HOST}$1 [R=301,L] |
上ではX-Forwarded-PortでELBからどのポートでアクセスがあったかを見ており、また、UAがELB-HealthCheckerかを見てリダイレクトをかけるかを判定してくれています。