質問で説明されている構成は、終わりのないリダイレクトを作成したため機能しませんでした: 443(ELB) 80(Apache) への転送 443(ELB) への転送 80(Apache) への転送 443(ELB) など。
そこで、ELB 構成を次のように変更しました。
- 443 (HTTPS) から 443 (HTTPS) への転送
- 80 (HTTP) から 80 (HTTP) への転送
443 (HTTPS) に転送するリスナー 443 (HTTPS) を作成したとき、認証に関する質問に答えることができませんでした。ELB の説明を見ると、「バックエンド認証: 無効」と表示されます。
ヘルスチェックは HTTPS:443 で行われます
(インスタンス セキュリティ グループも変更しました。ロード バランサーのみがポート 80 および 443 でインスタンスにアクセスできます)
アップデート:
別の解決策は、インスタンスでポート 80 のみを開くことです。
- 80 (HTTP) から 80 (HTTP) への転送
- 443 (HTTPS) から 80 (HTTP) への転送
ただし、X-Forwarded-Proto を使用して、クライアントが HTTP または HTTPS を使用したかどうかを判断し、X-Forwarded-Proto = http の場合にのみ HTTPS に転送します。
Apache の例:
<VirtualHost *:80>
...
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
...
</VirtualHost>
ELB チェックがリダイレクトされないように、行RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
が追加されました。ヘルスチェックに関するその他の解決策については、https://serverfault.com/questions/470015/how-should-i-configure-my-elb-health-check-when-using-namevirtualhosts-and-redirを参照してください
X-Forwarded-Proto に関する AWS ドキュメント: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/x-forwarded-headers.html#x-forwarded-proto