私たちのウェブサイトはHIPAAに準拠する必要があるため、すべてを暗号化する必要があります。クライアントが "http://mysite.com"を入力したときにエラーメッセージが表示されないようにしたいので、HTTPとHTTPSの両方をサポートし、HTTPをHTTPSにリダイレクトする必要があります。私は正しいですか?
私はウェブサーバーでそれを正しく行いました。したがって、Webサーバーに直接接続すると、HTTPは自動的にHTTPSにリダイレクトされます。すべて良い。
しかし、ウェブサーバーはAWS Application Load Balancerの背後にあります。 ELBでHTTPをHTTPSにリダイレクトする方法がわかりません。したがって、client browsersは、HTTP経由でELBに接続できます。
AWS Application Load BalancerでHTTP => HTTPSを設定するにはどうすればよいですか?
つまり、ELBとWebサーバー間の接続がHTTPSであることは確かですが、クライアントブラウザーとELB間の接続がHTTPSであることを確認するにはどうすればよいですか。
2018年7月現在 、これはアプリケーションロードバランサーでサポートされています。
HTTP:80
リスナーを追加/編集Redirect
に設定しますhttps
443
Original Host, path, query
に設定します301 - Permanently moved
に設定します通常、ELBはhttps(ポート443)を受信し、http(ポート80)でEC2インスタンス(ロードバランサーターゲット)に転送するように設定されています。
バックエンドWebサーバーはこれらのリクエストをロードバランサーのポート443にリダイレクトし、リダイレクトの無限ループ(ロードバランサーとバックエンドWebサーバーの間)を引き起こします。
一般的なエラーメッセージはERR_TOO_MANY_REDIRECTS
。
解決策は、リダイレクトを決定するときに、ロードバランサーから見たプロトコルであるX-Forwarded-Protoを確認することです。
Nginxの場合、設定は次のようになります。
server {
listen 80;
server_name www.example.org;
if ($http_x_forwarded_proto = 'http') {
return 301 https://$server_name$request_uri;
}
}
そして、Apache .htaccessの場合は次のようになります。
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
注:これをWebサーバーの再構成なしで処理できれば便利だと思うかもしれませんが、2018年の春以降、ELBだけを使用してこれを解決する方法はありません。これを機能させます。