使用 Cloud CDN 時,通常會透過相同的主機名稱傳遞 HTTP 和 HTTPS 內容。許多瀏覽器會強制使用傳輸層安全標準 (TLS),並禁止傳送不安全的內容,但仍有些應用情境允許透過相同主機名稱傳遞不安全和安全的內容。本文將探討如何使用 Cloud CDN 達成這項功能。
挑戰
用戶端與 CDN 邊緣伺服器建立連線時,系統會進行使用者傳輸通訊協定的協商。大多數傳統 CDN 平台會透過下列方式,將流量導向各自的傳送範圍:
- 使用 DNS CNAME 記錄,指向屬於 CDN 的網域名稱。
- 將流量轉送至支援該網域名稱 TLS 交涉的伺服器子集。
Cloud CDN 整合了 Cloud Load Balancing,因此做法與傳統 CDN 不同。Cloud CDN 會運用外部應用程式負載平衡器的 Anycast IP 位址。您可以在設定 Cloud CDN 時,將流量導向特定 IP 位址。這需要在 DNS 記錄中使用 A 記錄 (適用於 IPv4) 和/或 AAAA 記錄 (適用於 IPv6),而不是含有主機名稱值的 CNAME 記錄。
根據預設,設定負載平衡器的前端時,Google Cloud 會動態指派暫時性 IP 位址。您必須分別進行 HTTP 和 HTTPS 設定,因此可能會導致 Cloud CDN 執行個體有兩個 IP 位址。HTTP 和 HTTPS 兩者都使用相同的 A 或 AAAA 記錄 IP 位址,因此 DNS 就無法正確處理這個情況。
解決方案
透過相同主機名稱傳遞安全和不安全的內容時,系統會將用戶端導向可協商 HTTP 或 HTTPS 的邊緣伺服器。如要讓這項功能與 Cloud CDN 搭配運作,可以預留 IP 位址,並將預留的 IP 位址繫結至外部應用程式負載平衡器中的 HTTP 和 HTTPS 前端設定。
在圖表中:
- www.example.com 的連入要求來自使用 HTTP/2、HTTPS 和 HTTP 的用戶端。
系統會保留兩個 IP 位址,分別用於 IPv4 和 IPv6:
- 34.95.111.204
- [2600:1901:0:b13e::]
這兩個 IP 位址在 Cloud DNS 中會繫結至 www.example.com。
設定外部應用程式負載平衡器時,前端設定會包含四項使用預留 IP 位址的轉送規則:
名稱 通訊協定 IP:通訊埠 ipv4-http HTTP 34.95.111.204:80 ipv4-https HTTPS 34.95.111.204:443 ipv6-http HTTP [2600:1901:0:b13e::]:80 ipv6-https HTTPS [2600:1901:0:b13e::]:443 如果 Cloud CDN 快取失敗,負載平衡器會根據負載平衡器網址對應中定義的設定,將要求分配至後端來源。
步驟 1:預留全域外部 IP 位址
建立 IPv4 或 IPv6 位址 (或兩者)。如要支援 IPv4 和 IPv6 位址,則必須建立一個 IPv4 位址和一個 IPv6 位址。
在 DNS 記錄中建立 A (或 AAAA) 記錄,將流量導向這個預留的 IP 位址。
控制台
- 前往 Google Cloud 控制台的「External IP addresses」(外部 IP 位址) 頁面。
- 按一下「Reserve static address」(預留靜態位址) 以預留 IPv4 位址。
- 將「Name」(名稱) 指派為
ipv4-address。 - 將「Network tier」(網路級別) 設為「Premium」(進階)。
- 將「IP version」(IP 版本) 設為「IPv4」。
- 將「Type」(類型) 設為「Global」(通用)。
- 按一下「Reserve」(預留)。
負載平衡器會使用進階級網路,這是啟用 Cloud CDN 時的必要條件。
gcloud
gcloud compute addresses create ipv4-address \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
請記下預留的 IPv4 位址:
gcloud compute addresses describe lb-ipv4-1 \
--format="get(address)" \
--global
針對 IPv6 重複執行這個步驟。
詳情請參閱「預留新的靜態外部 IP 位址」。
步驟 2:將預留的 IP 位址繫結至負載平衡器
本節說明如何將 IP 位址指派給負載平衡器。負載平衡器的端對端設定操作說明則不在本文探討範圍內。如需設定範例,請參閱「建立 HTTPS 負載平衡器」。
您可以在前端設定部分,選取用戶端與負載平衡器間使用的通訊協定。
在此範例中,在用戶端與負載平衡器間使用的是 HTTP 和 HTTPS,因此需要有一個或多個 SSL 憑證資源才能設定 Proxy。
控制台
設定 HTTP 轉送規則
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
- 選取負載平衡器,然後按一下「Edit」(編輯)。
- 點選左側面板中的「Frontend configuration」(前端設定)。
- 在「Name」(名稱) 欄位中輸入
ipv4-http。 - 在「Protocol」(通訊協定) 欄位中選取
HTTP。 - 將「IP version」(IP 版本) 設為
IPv4。 - 在「IP address」(IP 位址) 部分,選取先前建立的「
ipv4-address」。 - 確認「Port」(通訊埠) 已設為
80,以允許 HTTP 流量。 - 按一下「Done」(完成)。
設定 HTTPS 轉送規則
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
- 選取負載平衡器,然後按一下「Edit」(編輯)。
- 點選左側面板中的「Frontend configuration」(前端設定)。
- 在「Name」(名稱) 欄位中輸入
ipv4-https。 - 在「Protocol」(通訊協定) 欄位中選取
HTTPS。 - 將「IP version」(IP 版本) 設為
IPv4。 - 在「IP address」(IP 位址) 部分,選取先前建立的「
ipv4-address」。 - 確認「Port」(通訊埠) 已設為
443,以允許 HTTP 流量。 - 按一下「Certificate」(憑證) 下拉式清單。
- 如果已有自行管理的 SSL 憑證資源,且想要做為主要 SSL 憑證使用,請在下拉式選單中選取所需資源。
- 否則,請選取 [Create a new certificate] (建立新憑證)。
- 選取「Upload my certificate」(上傳我的憑證) 或「Create Google managed certificate」(建立 Google 代管的憑證)。
- 如果選取「Upload my certificate」(上傳我的憑證),請完成下列步驟。
- 在「Name」(名稱) 部分填入
www-ssl-cert。 - 在正確的欄位中上傳「Public key certificate」(公用金鑰憑證) (.crt 檔案)、「Certificate chain」(憑證鏈結) (.csr 檔案) 及「Private key」(私密金鑰) (.key 檔案)。
- 按一下 [Create] (建立)。
- 在「Name」(名稱) 部分填入
- 如果選擇「Create Google managed certificate」(建立 Google 代管的憑證),請輸入「Domain」(網域)。
- 如要新增主要 SSL 憑證資源以外的憑證資源,請按照下列步驟操作:
- 按一下「Add certificate」(新增憑證)。
- 從「Certificates」(憑證) 清單中選取所需憑證,或是按一下「Create a new certificate」(建立新憑證) 並按照上方說明操作。
- 按一下「Done」(完成)。
針對 IPv6 重複執行這些步驟。
檢查並完成
- 點選左側面板中的「Review and finalize」(檢查並完成)。
- 將設定與打算建立的內容進行比較。
- 如果沒有任何問題,請按一下「Update」(更新)。
gcloud
建立目標 HTTP Proxy,將要求轉送至網址對應。
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=web-map
建立目標 HTTPS Proxy,將要求轉送至網址對應。Proxy 是負載平衡器的一部分,用於存放 HTTPS 負載平衡的 SSL 憑證,因此也可以在此步驟載入憑證。
gcloud compute target-https-proxies create https-lb-proxy \ --url-map=web-map --ssl-certificates=www-ssl-cert
建立兩個全域轉送規則,將傳入的要求轉送至 Proxy,一個用於 IPv4,另一個則用於 IPv6。
-
如果採用全域外部應用程式負載平衡器,請使用 gcloud CLI 指令搭配
load-balancing-scheme=EXTERNAL_MANAGED。這項設定提供進階流量管理功能。 - 如果採用傳統版應用程式負載平衡器,請使用
load-balancing-scheme=EXTERNAL。
gcloud compute forwarding-rules create ipv4-http \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=ipv4-address \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
gcloud compute forwarding-rules create ipv4-https \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=ipv4-address \ --global \ --target-https-proxy=https-lb-proxy \ --ports=443
-
如果採用全域外部應用程式負載平衡器,請使用 gcloud CLI 指令搭配
建立全域轉送規則後,可能需等待數分鐘時間,才能將設定傳播到全世界。
步驟 3:在 DNS 區域檔案中建立 A 或 AAAA 記錄
最後一個步驟是在 DNS 區域檔案中建立 A 和/或 AAAA 記錄,指向 Cloud CDN,主機名稱值會以您在負載平衡器上指派的預留 IP 位址回應。
現在,您可以透過 Cloud CDN,以相同的主機名稱同時提供 HTTP 和 HTTPS。
選用:將 HTTP 重新導向至 HTTPS
如要將 HTTP 要求重新導向至 HTTPS 負載平衡器,則必須新增部分 HTTP 負載平衡器,這類負載平衡器具有前端,但沒有後端。前端會接收要求,然後將要求重新導向至 HTTPS 負載平衡器。這項服務需具備以下條件:
- 使用與 HTTPS 負載平衡器相同預留外部 IP 位址的轉送規則,如本頁所示。
- 目標 HTTP Proxy,如本頁所示。
- 將流量重新導向至 HTTPS 負載平衡器的網址對應。
取得支援
如對 Google Cloud 和 Cloud CDN 有任何疑問,請與 Google Cloud 銷售團隊聯絡,或透過 Google Cloud社群 Slack 頻道與我們聯絡,並在 #cloud-cdn 頻道中張貼訊息。
後續步驟
- 如要進一步瞭解快取的內容,請參閱「快取詳細資料」。
- 如要解決負載平衡器問題,請參閱「負載平衡器疑難排解頁面」。
- 如要解決 Cloud CDN 問題,請參閱「Cloud CDN 疑難排解頁面」。
- 如要瞭解如何在 GKE 中使用 Cloud CDN,請參閱「Ingress 功能頁面上的 Cloud CDN」。
- 如要確認 Cloud CDN 是否從快取提供回應,請「查看記錄檔」。
- 清除負載平衡器設定。