このページでは、グローバル外部 HTTP(S) ロードバランサ(従来)に HTTP から HTTPS へのリダイレクトを設定する方法について説明します。このページは、グローバル外部 HTTP(S) ロードバランサ(従来)のみを対象としています。ロードバランサを別のモードで使用する場合は、次のいずれかのページをご覧ください。
この例では、URL リダイレクトを使用して、すべてのリクエストをポート 80(HTTP)からポート 443(HTTPS)にリダイレクトする方法について説明します。
HTTPS は、TLS(SSL)を使用して HTTP リクエストとレスポンスを暗号化し、通信を保護します。HTTPS を使用するウェブサイトでは、URL の先頭に http://
ではなく https://
が付いています。
新しい HTTPS ロードバランサの場合
新しい HTTPS ロードバランサを作成する場合は、Google Cloud コンソールを使用して HTTP から HTTPS へのリダイレクトを設定できます。
HTTPS ロードバランサのフロントエンドを作成するときに、次の操作を行います。
- Google Cloud コンソールで、ロードバランサの構成ページに移動します。
- [フロントエンドの構成] をクリックします。
- [プロトコル] で、[HTTPS(HTTP/2 を含む)] を選択します。
- [IP アドレス] で、予約済みの IP アドレスを選択します。
- [HTTP から HTTPS へのリダイレクトを有効にする] チェックボックスをクリックしてリダイレクトを作成します。
チェックボックスをオンにするには、HTTPS プロトコルを選択して、予約済みの IP アドレス(エフェメラルでない)を使用する必要があります。
![Google Cloud コンソールの [HTTP から HTTPS へのリダイレクト] チェックボックス。](https://cloud.google.com/static/load-balancing/images/http-to-https-redirect-screenshot.png?hl=ja)
バックエンド タイプに応じて、次のいずれかのガイドに記載されている Google Cloud コンソールの手順に沿って設定を完了します。
[HTTP から HTTPS へのリダイレクトを有効にする] チェックボックスを設定すると、URL マップ、転送ルール、ターゲット HTTP プロキシで構成される追加の部分的な HTTP ロードバランサが自動的に作成されます。この部分的な HTTP ロードバランサは、HTTPS ロードバランサと同じ IP アドレスを使用し、HTTP リクエストをロードバランサの HTTPS フロントエンドにリダイレクトします。デフォルトのリダイレクト レスポンス コードとして 301 Moved Permanently
が使用されています。
HTTPS ロードバランサを作成すると、ロードバランサのリストに部分的な HTTP ロードバランサと -redirect サフィックスが表示されます。HTTP から HTTPS へのリダイレクトをテストするの手順に沿って設定をテストします。
既存のロードバランサの場合
ポート 443 で HTTPS トラフィックを処理する外部 HTTPS ロードバランサ(ここでは LB1)がある場合は、部分的な外部 HTTP ロードバランサ(ここでは LB2)を作成し、次の設定を行う必要があります。
- LB1 と同じフロントエンド IP アドレス
- URL マップに構成されたリダイレクト
この部分的な HTTP ロードバランサは、HTTPS ロードバランサと同じ IP アドレスを使用し、HTTP リクエストをロードバランサの HTTPS フロントエンドにリダイレクトします。
次の図に、このアーキテクチャを示します。
HTTPS ロードバランサへのトラフィックのリダイレクト
外部 HTTPS ロードバランサ(LB1)が動作していることを確認したら、部分的な外部 HTTP ロードバランサ(LB2)を作成し、トラフィックを LB1 にリダイレクトするようにフロントエンドを構成できます。
この例では、301 レスポンス コードを使用しています。別のレスポンス コードを使用することもできます。
gcloud
でリダイレクトを構成するには、YAML ファイルをインポートし、ターゲット HTTP プロキシがトラフィックをリダイレクトする URL マップを参照するように設定する必要があります。Google Cloud コンソールを使用している場合、この処理は自動的に行われます。
リージョン外部 HTTP(S) ロードバランサは、Google Cloud コンソールでサポートされていません。
コンソール
構成を開始する- Google Cloud コンソールの [ロード バランシング] ページに移動します。
- [HTTP(S) ロード バランシング] で [構成を開始] をクリックします。
- [インターネット接続または内部専用] で [インターネットから自分の VM へ] を選択します。
- [グローバル / リージョン] で、[グローバル HTTP(S) ロードバランサ(従来型)] を選択します。
- ロードバランサの名前を入力します(例:
http-redirect
)。 - ウィンドウを開いたままにして続行します。
- [バックエンドの構成] セクションをスキップします。
- ページの左側の列で、[ホストとパスのルール] をクリックします。
- [詳細なホストとパスのルール(URL リダイレクト、URL の書き換え)] を選択します。
- [アクション] で、[クライアントを別のホスト / パスにリダイレクト] を選択します。
- [接頭辞のリダイレクト] フィールドは空欄のままにします。
- [パス リダイレクト] で、[接頭辞のリダイレクト] を選択します。
- [パス値] は空欄のままにします。
- [リダイレクトのレスポンス コード] で、[301 - Moved Permanently(恒久的に移動した)] を選択します。
- [HTTPS リダイレクト] で、[有効] を選択します。
- [完了] をクリックします。
- ロードバランサ構成ページを開いたままにして続行します。
- ロードバランサの構成ページで、[フロントエンドの構成] をクリックします。
- [プロトコル] を HTTP に設定します。
- [IP アドレス] に、HTTPS ロードバランサに使用した IP アドレスを設定します。
- [ポート] が 80 に設定され、HTTP トラフィックが許可されていることを確認します。
- [完了] をクリックします。
- ウィンドウを開いたままにして続行します。 構成を確認する
- 左側のパネルで、[確認と完了] をクリックします。
- 現在の設定と作成しようとしている内容を比較します。
- 設定に問題がない場合は、[作成] をクリックします。
完了すると、Google Cloud コンソールに次の 2 つのロードバランサが表示されます。

Google Cloud コンソールには、web-map-http
ロードバランサに関する情報が次のように表示されます。

gcloud
- YAML ファイル
/tmp/web-map-http.yaml
を作成します。この例では、レスポンス コードとして MOVED_PERMANENTLY_DEFAULT を使用しています。 - URL マップを検証します。
- YAML ファイルをインポートして、HTTP ロードバランサの URL マップを作成します。この URL マップの名前は
web-map-http
です。 - URL マップが更新されていることを確認します。HTTP ロードバランサの URL マップは次のようになります。
web-map-http
を URL マップとして使用して、新しいターゲット HTTP プロキシを作成するか、既存のターゲット HTTP プロキシを更新します。- 受信リクエストをプロキシに転送する転送ルールを作成します。
--address
フラグでlb-ipv4-1
を指定します。これは、外部 HTTPS ロードバランサに使用されるものと同じ IP アドレスです。
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¶meter2=value2 expectedOutputUrl: https://example.com/test/?parameter1=value1¶meter2=value2 expectedRedirectResponseCode: 301
gcloud compute url-maps validate --source /tmp/web-map-http.yaml
テストに合格し、コマンドによって成功メッセージが出力された場合は、URL マップに変更を保存します。
gcloud compute url-maps import web-map-http \ --source /tmp/web-map-http.yaml \ --global
既存の URL マップを更新する場合、次のプロンプトが表示されます。
Url Map [web-map-http] will be overwritten. Do you want to continue (Y/n)?
続行するには [Y] を押します。
gcloud compute url-maps describe web-map-http
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/global/urlMaps/web-map-http
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=web-map-http \ --globalまたは
gcloud compute target-http-proxies update http-lb-proxy \ --url-map=web-map-http \ --global
gcloud compute forwarding-rules create http-content-rule \ --load-balancing-scheme=EXTERNAL \ --network-tier=PREMIUM \ --address=lb-ipv4-1 \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
カスタム ヘッダーの追加
必要に応じて、HTTPS ロードバランサのバックエンド サービスに HTTP Strict-Transport-Security
ヘッダーを次のように追加します。
- ヘッダー名:
Strict-Transport-Security
- ヘッダー値:
max-age=31536000; includeSubDomains; preload
この設定でカスタム ヘッダーがクライアントに送信され、次回クライアントが HTTP 経由で URL にアクセスしようとすると、ブラウザはリダイレクトします。
カスタム ヘッダーをバックエンド サービスの構成に追加するには、--custom-response-header
フラグを使用します。
gcloud compute backend-services update BACKEND_SERVICE_NAME_LB1 \ --global \ --custom-response-header='Strict-Transport-Security:max-age=31536000; includeSubDomains; preload'
詳細については、カスタム ヘッダーの作成をご覧ください。
HTTP から HTTPS へのリダイレクトをテストする
両方のロードバランサで使用している予約済みの IP アドレスをメモします。
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
この例では、予約済みの 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
関連手順
Terraform を使用するには、[HTTP から HTTPS へのリダイレクト] タブをご覧ください。
GKE については、GKE ドキュメントの HTTP から HTTPS へのリダイレクトをご覧ください。
内部 HTTP(S) ロードバランサについては、内部 HTTP(S) ロードバランサでの HTTP から HTTPS へのリダイレクトの設定をご覧ください。
その他の種類のリダイレクトについては、URL リダイレクトをご覧ください。