Avaniは
ロードバランサとApacheを使用して、HTTPトラフィックをHTTPSにリダイレクトする
ロードバランサーを使用して Apache

redirect-http-https-elb-avani

Elastic Load Balancing(ELB)ロードバランサでHTTPリスナーとHTTPSリスナーの両方を使用しています。ELBはSSLをオフロードしており、バックエンドは単一のHTTPポート(HTTPSからHTTP)だけをリッスンしています。ポート80上のWebサーバーに来るすべてのトラフィックをHTTPSポート443にリダイレクトしたいが、バックエンドリスナーをポート443に変更したくない。トラフィックをリダイレクトすると、Webサイトは機能しなくなり、「ERR_TOO_MANY_REDIRECTS」のエラーメッセージが表示されます。解決方法を教えてください。

この状態は、一般的に次のような原因で発生します。

  1. HTTP要求をHTTPSに送るためのWebサーバー上の書き換えルールは、ロードバランサ上のHTTPSトラフィックにポート443を使用するよう要求します。
  2. ロードバランサが要求をポート80のバックエンドWebサーバーに送信します。
  3. バックエンドWebサーバーは、これらの要求をロードバランサのポート443にリダイレクトします。

これにより、ロードバランサとバックエンドWebサーバー間の無限ループのリダイレクションが発生し、要求は処理できません。

X-Forwarded-ProtoクライアントのプロトコルがHTTPの場合にのみ適用するようにWebサーバーの書き換えルールを変更します。クライアントが使用する他のすべてのプロトコルの書き換えルールは無視してください。

このように、クライアントがHTTPを使用してWebサイトにアクセスすると、HTTPS URLにリダイレクトされ、クライアントがHTTPSを使用する場合、Webサーバーによって直接配信されます。

注:この記事では、Apache、Nginx、およびIIS Webサーバーの例を示します。

Apache

仮想ホストファイルまたは .htaccess ファイルのいずれかで、mod_rewrite ルールを使用します。リダイレクトルールには仮想ホストファイルを使用することをベストプラクティスとして推奨しています。

仮想ホストファイル (推奨事項)

構成ファイルの仮想ホストセクションに書き換えルールを含めておく必要があります。たとえば、Apache httpd サーバーでは /etc/httpd/conf/httpd.conf ファイルを編集し、Apache 2.4 では /etc/apache2/sites-enabled/ フォルダの conf ファイルを編集します。

<VirtualHost *:80>

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

</VirtualHost>

.htaccess ファイル

注: .htaccess の使用は推奨されません。メインの構成ファイルにアクセスできない場合にのみ使用するようにしてください。詳細については、Apache チュートリアル: .htaccess ファイルを参照してください。

.htaccess を使用するには、ディレクトリディレクティブから、Apache 構成ファイルで .htaccess ファイルを使用できるようにしておく必要があります。たとえば、Apache httpd サーバーの場合、/etc/httpd/conf/httpd.conf ファイルを編集します。Apache 2.4 の場合は、/etc/apache2/sites-enabled/ フォルダの conf ファイルを編集します。詳細については、Apache チュートリアル: .htaccess ファイルを参照してください。

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

.htaccess ファイルの書き換えルールは、以下のようになります。

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

Nginx

ngnix.confファイルのNginxバックエンドの書き換えルールは、以下のようになります。

注: nginx / 1.10.3(Ubuntu)およびnginx / 1.12.1(Amazon Linux)のバージョンに適用されます。

server {
    listen   80;
    server_name    www.example.org;   
    if ($http_x_forwarded_proto = 'http') {
         return 301 https://$server_name$request_uri;   
    }
}

IIS

web.configファイルを変更する前に、URL書き換えモジュールをインストールする必要がありますMicrosoft IISダウンロード

IISバックエンドの書き換えルールは、 セクション下のweb.configファイルにある以下のものに類似します。

注: Microsoft Windows Server 2012 R2および2016 Baseにのみ適用されます。

<rewrite> 
<rules> 
<rule name="Rewrite HTTP to HTTPS” stopProcessing=”true”> 
<match url="^(.*)$" /> 
<conditions logicalGrouping=”MatchAny”> 
<add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$" />
</conditions> 
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" /> 
</rule> 
</rules> 
</rewrite>

IISマネージャを開き、その後、既定の Web サイトを更新します。ルールは「URL書き換え」セクションに表示されます。ウェブサイトを再起動してテストします。


このページは役に立ちましたか? はい | いいえ

AWS サポートナレッジセンターに戻る

サポートが必要ですか?AWS サポートセンターをご覧ください。

公開日: 2016 年 08 月 12 日

更新: 2018 年 3 月 27 日