web-dev-qa-db-ja.com

AWS Elastic Load BalancerでHTTPSを強制する

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]
7
panos2point0

したがって、HTTP/80とHTTPS/443の両方でトラフィックを受け入れるようにELBを設定しているものの、すべてHTTPにポート転送していると想定します。

メソッド(賢い)を使用したい場合、得られるものが%{X-Forwarded-Proto}でないことを確信しています-HTTP:接頭辞は私には奇妙に見えます。それ以外は、これは私には正しいように見えます。

これが仮想ホストまたはメインサーバーの構成にあり、それでも機能しない場合は、追加できます

RewriteLog rewrite-log
RewriteLogLevel 3

次に、rewrite-logファイルを調べて、実際に何が行われているのかを確認します。このファイルは信じられないほど冗長になる可能性があり、低いレベルから始めます。 .htaccessファイルからロギングを開始することはできません。

RewriteRule[R=301,L]にフラグを立てることをお勧めします。これにより、サーバーは301応答を返し、リダイレクトを永続的であると見なし、それに応じてリンクを更新するように通知します。)

5
Tom Harrison Jr

私の場合、問題は!httpsの状態がヘルスチェックに違反していることでした。

条件を^ http $に変更すると機能しました

RewriteCond %{HTTP:X-Forwarded-Proto} ^http$

ここでそれを見つけました: https://forums.aws.Amazon.com/thread.jspa?messageID=6419

1
dazl

ハートビートファイルにエスケープされていないドット(/alive.html)が含まれていることに気付く前に、何時間も苦労して私の経験を追加したかっただけです。ええと。

2番目の問題は、メインドメインがリダイレクトしていなかったが、ファイルはリダイレクトしていたことです。つまり http://domain.com/hello.htmlhttps://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]
1
iopener