AWS で ELB(Classic Load Balancer)を通して Apache を公開している構成で、よくある 301 リダイレクトの設定をするとリダイレクトループになってしまう。
.htaccess の設定
ダメな例
1 2 3 | RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] |
良い例
1 2 3 | RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} =http RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent] |
https で受けたアクセスも、ELB から EC2 の内部的な通信は http で行っているため、普通に判定するとリダイレクトループが発生してしまう。X-Forwarded-Proto を使ってロードバランサーを通る前のプロトコルで判定する必要がある。
参考にしたサイト
ELB を使用して HTTP トラフィックを HTTPS にリダイレクトする
私は Classic Load Balancer で HTTP と HTTPS リスナーを使用しています。Classic Load Balancer は SSL をオフロードし、バックエンド接続は単一の HTTP ポート (ポート 80) ...
コメント