リージョン外部アプリケーション ロードバランサに HTTP から HTTPS へのリダイレクトを設定する

このページでは、リージョン外部アプリケーション ロードバランサに HTTP から HTTPS へのリダイレクトを設定する方法について説明します。このページは、リージョン外部アプリケーション ロードバランサのみを対象としています。ロードバランサを別のモードで使用する場合は、次のいずれかのページをご覧ください。

この例では、URL マップ リダイレクトを使用して、すべてのリクエストを HTTP から HTTPS にリダイレクトする方法を示します。この例では、一般的なポートの 80(HTTP の場合)と 443(HTTPS の場合)を使用してリダイレクトを設定します。ただし、これらの特定のポート番号を使用する必要はありません。アプリケーション ロードバランサの転送ルールでは、1~65535 の単一ポートを参照できます。

HTTPS は、TLS(SSL)を使用して HTTP リクエストとレスポンスを暗号化し、通信を保護します。HTTPS を使用するウェブサイトでは、URL の先頭に http:// ではなく https:// が付いています。

新しい HTTPS ロードバランサの場合

リージョン外部アプリケーション ロードバランサでは、新しいロードバランサの作成中に HTTP から HTTPS へのリダイレクトを作成できません。最初に、Compute Engine バックエンド ガイドの手順に沿って新しいロードバランサを作成する必要があります。その後、次のセクションの手順に沿って、すべてのリクエストに HTTP から HTTPS へのリダイレクトを設定できます。

以下の手順は、ポート 443 で HTTPS トラフィックを処理する外部 HTTPS ロードバランサがすでに存在する場合を想定しています。

既存のロードバランサの場合

ポート 443 で HTTPS トラフィックを処理する HTTPS アプリケーション ロードバランサ(ここでは LB1)がすでにある場合は、部分的な HTTP アプリケーション ロードバランサ(ここでは LB2)を作成し、次の設定を行う必要があります。

  • LB1 と同じフロントエンド IP アドレス
  • URL マップに構成されたリダイレクト

この部分的な HTTP ロードバランサは、HTTPS ロードバランサと同じ IP アドレスを使用し、HTTP リクエストをロードバランサの HTTPS フロントエンドにリダイレクトします。

次の図に、このアーキテクチャを示します。

HTTP から HTTPS へのリダイレクト構成アーキテクチャ。
図 2. HTTP から HTTPS へのリダイレクトの構成アーキテクチャ(クリックして拡大)。

HTTPS ロードバランサにトラフィックをリダイレクトする

HTTPS ロードバランサ(LB1)が動作していることを確認したら、部分的な HTTP ロードバランサ(LB2)を作成し、トラフィックを LB1 にリダイレクトするようにフロントエンドを構成できます。

この例では、301 レスポンス コードを使用しています。別のレスポンス コードを使用することもできます。

gcloud でリダイレクトを構成するには、YAML ファイルをインポートし、ターゲット HTTP プロキシがトラフィックをリダイレクトする URL マップを参照するように設定する必要があります。Google Cloud コンソールを使用している場合、この処理は自動的に行われます。

リージョン外部アプリケーション ロードバランサは、Google Cloud コンソールでサポートされていません。

gcloud

  1. YAML ファイル /tmp/web-map-http.yaml を作成します。この例では、レスポンス コードとして MOVED_PERMANENTLY_DEFAULT を使用しています。
  2.        kind: compute#urlMap
           name: web-map-http
           defaultUrlRedirect:
             redirectResponseCode: MOVED_PERMANENTLY_DEFAULT
             httpsRedirect: True
           tests:
           - description: Test with no query parameters
             host: example.com
             path: /test/
             expectedOutputUrl: https://example.com/test/
             expectedRedirectResponseCode: 301
           - description: Test with query parameters
             host: example.com
             path: /test/?parameter1=value1&parameter2=value2
             expectedOutputUrl: https://example.com/test/?parameter1=value1&parameter2=value2
             expectedRedirectResponseCode: 301
           
  3. YAML ファイルをインポートして、HTTP ロードバランサの URL マップを作成します。この URL マップの名前は web-map-http です。
  4.        gcloud compute url-maps import web-map-http \
               --source /tmp/web-map-http.yaml \
               --region=REGION
           

    既存の URL マップを更新する場合、次のプロンプトが表示されます。

           Url Map [web-map-http] will be overwritten.
    
           Do you want to continue (Y/n)?
           

    続行するには [Y] を押します。

  5. URL マップが更新されていることを確認します。HTTP ロードバランサの URL マップは次のようになります。
  6.        gcloud compute url-maps describe web-map-http \
               --region=REGION
           
           creationTimestamp: '2020-03-23T10:53:44.976-07:00'
           defaultUrlRedirect:
             httpsRedirect: true
             redirectResponseCode: MOVED_PERMANENTLY_DEFAULT
           fingerprint: 3A5N_RLrED8=
           id: '2020316695093397831'
           kind: compute#urlMap
           name: web-map-http
           selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/urlMaps/web-map-http
           
  7. web-map-http を URL マップとして使用して、新しいターゲット HTTP プロキシを作成するか、既存のターゲット HTTP プロキシを更新します。
  8.        gcloud compute target-http-proxies create http-lb-proxy \
               --url-map=web-map-http \
               --region=REGION
           
    または
            gcloud compute target-http-proxies update http-lb-proxy \
               --url-map=web-map-http \
               --region=REGION
           
  9. 受信リクエストをプロキシに転送する転送ルールを作成します。--address フラグで lb-ipv4-1 を指定します。これは、外部 HTTPS ロードバランサに使用されるものと同じ IP アドレスです。
  10.        gcloud compute forwarding-rules create http-content-rule \
               --load-balancing-scheme=EXTERNAL_MANAGED \
               --address=lb-ipv4-1 \
               --network-tier=STANDARD \
               --region=REGION \
               --target-http-proxy=http-lb-proxy \
               --target-http-proxy-region=REGION \
               --ports=80
           

HTTP から HTTPS へのリダイレクトをテストする

両方のロードバランサで使用している予約済みの IP アドレスをメモします。

gcloud compute addresses describe lb-ipv4-1 
--format="get(address)"
--region=REGION

この例では、予約済みの IP アドレスが 34.98.77.106 であるとしています。http://34.98.77.106/ URL は https://34.98.77.106/ にリダイレクトされます。

数分経過したら、次の curl コマンドを実行してテストします。

curl -v http://hostname.com

出力例:

* Connected to 34.98.77.106 (34.98.77.106) port 80 (#0)
> GET / HTTP/1.1
> Host: hostname.com
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Cache-Control: private
< Content-Type: text/html; charset=UTF-8
< Referrer-Policy: no-referrer
< Location: https://hostname.com
< Content-Length: 220
< Date: Fri, 30 Jul 2021 21:32:25 GMT
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://hostname.com">here</A>.
</BODY></HTML>
* Connection #0 to host hostname.com left intact

次のステップ