為區域性外部應用程式負載平衡器設定 HTTP 至 HTTPS 的重新導向

本頁面說明如何為區域外部應用程式負載平衡器設定 HTTP 至 HTTPS 的重新導向。本頁面僅適用於區域性外部應用程式負載平衡器。如果您使用的是其他模式的負載平衡器,請參閱下列任一頁面:

本範例說明如何使用網址對應重新導向,將所有要求從 HTTP 重新導向至 HTTPS。本例說明如何使用眾所皆知的通訊埠 80 (HTTP) 和 443 (HTTPS) 設定重新導向。不過,您不必使用這些特定連接埠號碼。應用程式負載均衡器的每個轉送規則都可以參照 1 到 65535 之間的單一連接埠

HTTPS 會使用 TLS (SSL) 加密 HTTP 要求和回應,讓系統更安全。使用 HTTPS 的網站網址開頭為 https://,而非 http://

適用於新的 HTTPS 負載平衡器

區域性外部應用程式負載平衡器不支援在建立新負載平衡器時建立 HTTP 至 HTTPS 的重新導向。您必須先按照 Compute Engine 後端指南中的操作說明,建立新的負載平衡器。接著,您可以按照下一節的操作說明,為所有從 HTTP 到 HTTPS 的要求設定重新導向。

本程序假設您已擁有外部 HTTPS 負載平衡器,可在通訊埠 443 上提供 HTTPS 流量。

現有負載平衡器

如果您已在通訊埠 443 上提供 HTTPS 流量的 HTTPS 應用程式負載平衡器 (在此稱為 LB1),則必須使用以下設定建立部分 HTTP 應用程式負載平衡器 (在此稱為 LB2):

  • LB1 使用的相同前端 IP 位址
  • 在網址對應中設定的重新導向

這個部分 HTTP 負載平衡器會使用與 HTTPS 負載平衡器相同的 IP 位址,並將 HTTP 要求重新導向至負載平衡器的 HTTPS 前端。

下圖說明此架構。

HTTP 至 HTTPS 重新導向設定架構。
圖 2. HTTP 至 HTTPS 重新導向設定架構 (按一下可放大)。

將流量重新導向至 HTTPS 負載平衡器

確認 HTTPS 負載平衡器 (LB1) 運作正常後,您可以建立部分 HTTP 負載平衡器 (LB2),並將前端設定為將流量重新導向至 LB1。

本範例使用 301 回應碼。您可以改用其他回應碼

如要使用 gcloud 設定重新導向,您必須匯入 YAML 檔案,並確認目標 HTTP Proxy 會將流量導向至重新導向的網址對應。如果您使用的是 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 負載平衡器的網址對應。這個網址對應的名稱為 web-map-http
  4.        gcloud compute url-maps import web-map-http \
               --source /tmp/web-map-http.yaml \
               --region=REGION
           

    如果您要更新現有的網址對應,系統會顯示下列提示:

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

    如要繼續操作,請按下 Y 鍵。

  5. 確認網址對應已更新。HTTP 負載平衡器的網址對應應如下所示:
  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 做為網址對應,建立新的目標 HTTP Proxy 或更新現有目標 HTTP Proxy。
  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. 建立轉送規則,將傳入要求轉送至 Proxy。--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.106http://34.98.77.106/ 網址會重新導向至 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

後續步驟