Elastic Load Balancerですべての受信HTTPトラフィックをHTTPSにリダイレクトする必要があります。
Apache mod_rewriteを使って疲れました:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
このルールは、ロードバランサーによって追加されたX-Forwarded-Protoヘッダーを利用して、ユーザーのブラウザーに同じURLのHTTPSバージョンを要求するように指示する必要があります。
これまでのところ機能しません(リダイレクトは発生しません)。
何が悪いのですか?
これを行うより良い方法はありますか?
編集:
これは最終的にはうまくいきました:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]
したがって、HTTP/80とHTTPS/443の両方でトラフィックを受け入れるようにELBを設定しているものの、すべてHTTPにポート転送していると想定します。
メソッド(賢い)を使用したい場合、得られるものが%{X-Forwarded-Proto}
でないことを確信しています-HTTP:
接頭辞は私には奇妙に見えます。それ以外は、これは私には正しいように見えます。
これが仮想ホストまたはメインサーバーの構成にあり、それでも機能しない場合は、追加できます
RewriteLog rewrite-log
RewriteLogLevel 3
次に、rewrite-log
ファイルを調べて、実際に何が行われているのかを確認します。このファイルは信じられないほど冗長になる可能性があり、低いレベルから始めます。 .htaccess
ファイルからロギングを開始することはできません。
(RewriteRule
[R=301,L]
にフラグを立てることをお勧めします。これにより、サーバーは301応答を返し、リダイレクトを永続的であると見なし、それに応じてリンクを更新するように通知します。)
私の場合、問題は!httpsの状態がヘルスチェックに違反していることでした。
条件を^ http $に変更すると機能しました
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
ここでそれを見つけました: https://forums.aws.Amazon.com/thread.jspa?messageID=6419
ハートビートファイルにエスケープされていないドット(/alive.html)が含まれていることに気付く前に、何時間も苦労して私の経験を追加したかっただけです。ええと。
2番目の問題は、メインドメインがリダイレクトしていなかったが、ファイルはリダイレクトしていたことです。つまり http://domain.com/hello.html は https://domain.com/hello.html にリダイレクトされていましたが、 http:// domain.com ではありませんでした。
これが私のために私の.htaccessファイルに入れたものです:
RewriteEngine On
# SSL connection forced
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REQUEST_URI} !^/alive\.html$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]