Avani がロードバランサーと Apache を使用して
HTTP トラフィックを HTTPS にリダイレクトする方法を
説明します

redirect-http-https-elb-avani

Elastic Load Balancing (ELB) を使用しており、Classic Load Balancer には HTTP リスナーと HTTPS リスナーが用意されています。リダイレクトロジックをウェブサーバーに追加すると、ウェブサイトの動作が停止し、ERR_TOO_MANY_REDIRECTS エラーが表示されます。ロードバランサーは SSL をオフロードしており、バックエンドは単一の HTTP ポートでのみリッスンしています。ロードバランサー経由でポート 80 のウェブサーバーに到達するすべてのトラフィックを HTTPS ポート 443 にリダイレクトさせたいが、バックエンドリスナーをポート 443 に変更したくありません。この問題の解決方法を教えてください。

Classic Load Balancer を使用している場合は、ロードバランサーレベルで HTTP トラフィックを HTTPS にリダイレクトすることはできません。その代わりに、ロードバランサーの背後のウェブサーバーにリダイレクトロジックを実装します。

以下の場合、ロードバランサーとバックエンドウェブサーバー間でリダイレクトの無限ループが発生する原因になります。

  1. HTTP リクエストを HTTPS にルーティングするためのウェブサーバー上の書き換えルールにより、ロードバランサー上の HTTPS トラフィックでポート 443 を使用する必要があります。
  2. リクエストは、ポート 80 でロードバランサーよりバックエンドウェブサーバーに送信されます。
  3. バックエンドウェブサーバーは、リクエストをロードバランサーのポート 443 にリダイレクトします。

ERR_TOO_MANY_REDIRECTS エラーが返り、リクエストは送信されません。

この問題を解決するには、クライアントプロトコルが HTTP の場合にのみ適用する HTTP リクエストの X-Forwarded-Proto ヘッダーを使用してウェブサーバーの書き換えルールを変更します。クライアントで使用するその他のプロトコルではすべて、この書き換えルールは無視されます。

注: アプリケーションロードバランサーを使用している場合は、リダイレクトアクションを使用してトラフィックをリダイレクトします。

Apache、NGINX、IIS ウェブサーバーを対象とした以下の例では、次のように行います。

  • クライアントが HTTP を使用してウェブサイトにアクセスしている場合は、HTTPS URL にリダイレクトされます。
  • クライアントが HTTPS を使用してウェブサイトにアクセスしている場合は、ウェブサーバーより直接提供されます。

Apache サーバー: 仮想ホストファイルメソッド (推奨)

設定ファイルの仮想ホストセクションに書き換えルールを含めます。たとえば、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>

Apache サーバー: .htaccess ファイルメソッド (非推奨)

警告: .htaccess を使用することは推奨されておらず、メイン設定ファイルへのアクセス権がない場合にのみ使用します。「Apache HTTP サーバーチュートリアル: .htaccess ファイル」を参照してください。

1.ディレクトリディレクティブの Apache 設定ファイルから .htaccess を有効にします。たとえば、Apache httpd サーバーで /etc/httpd/conf/httpd.conf ファイルを編集します。Apache 2.4 では、/etc/apache2/sites-enabled/ フォルダの conf ファイルを編集します。「Apache HTTP サーバーチュートリアル: .htaccess ファイル」を参照してください。

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

2.以下の書き換えルールを .htaccess ファイルに追加します。

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

NGINX サーバー

注: nginx/1.10.3 (Ubuntu) および nginx/1.12.1 (Amazon Linux) に適用できます。

以下の例の書き換えルール (nginx.conf) を変更します。

server {
    listen 80;
    server_name _;
    if ($http_x_forwarded_proto = 'http'){
    return 301 https://$host$request_uri;
    }
}

IIS サーバー

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

1.Microsoft IIS のダウンロードから URL 書き換えモジュールをインストールします

2.web.config<system.webServer> セクションの IIS バックエンドの例の書き換えルールを変更します。

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

3.IIS Manager を開き、デフォルトのウェブサイトを更新します。このルールは、URL 書き換えセクションに表示されます。

4.ウェブサイトを立ち上げ直し、リダイレクトが動作していることを確認します。


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

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

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

公開日: 2016 年 08 月 12 日

更新: 2018 年 08 月 31 日