您可以透過多種方式設定 Media CDN 的來源。本頁說明如何設定來源。
將 Cloud Storage 值區設為來源
Media CDN 支援將 Cloud Storage 值區做為內容後端。每項服務都可以為主機、路徑和其他要求屬性設定路徑,藉此參照多個值區。
建立來源資源時,請使用值區網址 (例如 gs://my-bucket
) 做為來源位址,設定 Cloud Storage 值區。
主控台
前往 Google Cloud 控制台的「Media CDN」頁面。
按一下「來源」Origins分頁標籤。
按一下「建立來源」
。輸入來源名稱。例如
cloud-storage-origin
。選用:輸入說明。
針對「Origin address」(來源位址),選擇「Select a Google Cloud Storage bucket」(選取 Google Cloud Storage 值區)。
瀏覽並選取 Cloud Storage bucket。
如果是 Cloud Storage,請保留預設通訊協定和連接埠設定。
選用步驟:如要讓來源要求標頭覆寫優先於用戶端傳送的標頭,或是路徑層級標頭動作建立的標頭,請按照下列步驟操作:
- 選取「啟用來源覆寫功能」。
- 在「Headers」區段中,新增一或多個名稱/值組合,即可指定標頭。
選用:選取容錯移轉來源,以防這個來源無法連線。您之後可以更新這個欄位。
在「Max attempts」(嘗試次數上限) 中,選取嘗試從這個來源填補快取的次數上限。
選用:指定下列逾時值:
- 在「連線逾時」部分,選取等待建立原始連線的最長時間。
- 在「回應逾時」部分,選取允許回應完成的最長時間。
- 在「讀取逾時」部分,選取單一 HTTP 連線或串流讀取作業之間的等待時間上限。
選用:按一下「新增標籤」,並指定一或多個鍵/值組合。
按一下「Create origin」(建立來源)。
gcloud
使用 gcloud edge-cache origins create
指令:
gcloud edge-cache origins create ORIGIN \ --origin-address=ADDRESS
更改下列內容:
ORIGIN
:新來源的名稱ADDRESS
:值區名稱,例如gs://my-bucket
無論 bucket 是多區域、雙區域或單一區域,都是如此。
設定服務時,您可以將隨選影片內容傳送至一個值區,直播內容則傳送至另一個值區。如果每個工作流程由不同團隊管理,這項功能就非常實用。如要縮短快取填入延遲時間,您可以同樣將 eu-media.example.com
區域路徑傳送至位於歐盟的多區域 Cloud Storage bucket,並將 us-media.example.com
區域路徑 (或符合路徑、標頭或查詢參數) 傳送至美國的儲存空間 bucket。
如果寫入延遲時間非常重要 (例如低延遲直播),您可以設定盡量靠近使用者的地區 Cloud Storage 端點。
驗證要求
如要確認要求來自 Media CDN,請使用下列其中一種支援的方法:
- 確認連線 IP 位址來自 Media CDN 的快取填滿範圍。所有客戶都會共用這些範圍,但連線至來源時,
EdgeCacheService
資源一律會使用這些範圍。 - 新增自訂要求標頭,並加入您在來源上驗證的權杖值 (例如隨機 16 位元組的值)。這樣一來,來源就能拒絕未包含這個值的要求。
設定來源通訊協定
如果來源支援 HTTP/2,則不需要明確設定通訊協定。如果來源僅支援 HTTPS (透過 TLS 的 HTTP/1.1) 或 HTTP/1.1 (不含 TLS),請按照下列步驟明確設定 protocol
欄位:
主控台
前往 Google Cloud 控制台的「Media CDN」頁面。
按一下「來源」Origins分頁標籤。
選取來源,然後按一下「編輯」。
選取「HTTPS」或「HTTP」做為通訊協定。如果是 HTTP,請將通訊埠指定為
80
。按一下「更新來源」。
gcloud
使用 gcloud edge-cache origins update
指令:
gcloud edge-cache origins update LEGACY_ORIGIN \ --protocol=HTTPS
將 LEGACY_ORIGIN
替換為來源名稱。
設定私有 Cloud Storage 值區
Media CDN 可以從任何可透過網際網路存取的 HTTP 或 HTTPS 端點提取內容。在某些情況下,您可能需要驗證,只允許 Media CDN 提取內容,並防止未經授權的存取。Cloud Storage 透過 IAM 權限支援這項功能。
如果是 Cloud Storage 來源,請執行下列操作:
- 將 Cloud Storage 值區的
objectViewer
IAM 權限授予 Media CDN 服務帳戶,這些值區會做為來源使用。 - 移除
allUsers
權限。 - 選用:移除
allAuthenticatedUsers
權限。
如要變更 Cloud Storage 值區的權限,您必須具備「Storage 管理員」角色 (roles/storage.admin
)。
Media CDN 服務帳戶屬於 Media CDN 專案,因此不會顯示在專案的服務帳戶清單中。服務帳戶只會授予您明確允許的專案中 Media CDN 資源的存取權。
您必須建立至少一個 Media CDN 資源,才能觸發服務帳戶建立作業。在大多數情況下,這是連線至 Cloud Storage bucket 的 EdgeCacheOrigin
資源。
如要授予服務帳戶 Bucket 的 Media CDN 存取權,請將 objectViewer
角色指派給服務帳戶:
gcloud storage buckets add-iam-policy-binding gs://BUCKET \ --member=serviceAccount:service-PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com \ --role=roles/storage.objectViewer
將 PROJECT_NUMBER
替換為專案編號。
如要移除做為正式版來源的現有儲存空間值區公開存取權,請至少等待 10 分鐘,讓設定傳播出去。
使用 gcloud storage buckets remove-iam-policy-binding
指令,移除授予指定 bucket 中 allUsers
角色的權限。舉例來說,如果值區授予 allUsers
objectViewer
角色,請使用下列指令移除授權:
gcloud storage buckets remove-iam-policy-binding gs://BUCKET \ --member=allUsers --role=roles/storage.objectViewer
如要確認公開存取權已移除,請開啟無痕瀏覽器視窗,然後嘗試使用 https://storage.googleapis.com/BUCKET/object.ext
存取 bucket 物件。
如要允許一個專案中的 EdgeCacheService
資源存取另一個專案中的 Cloud Storage 值區,您可以授予該專案中的 Media CDN 服務帳戶存取儲存空間值區的權限。
如要這麼做,請確認 PROJECT_NUM
service-PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com
是需要存取 EdgeCacheService
資源的專案編號。您可以針對多個專案重複這個步驟,特別是當某些專案包含不同的 Media CDN 環境 (例如開發、測試或正式環境),而另一個專案包含影片或媒體資產時。
您可以在不為該路徑啟用簽署要求的情況下,保護 Cloud Storage 來源的存取權。
設定私有 Cloud Storage 後,使用者仍可直接從 Media CDN 存取快取內容。如要瞭解如何向個別使用者發出簽署要求,請參閱簽署要求。
將外部應用程式負載平衡器設定為來源
如果您需要在 Compute Engine、GKE 或地端來源之間進行主動健康狀態檢查、輪詢或負載感知轉送,可以將外部應用程式負載平衡器設定為來源。
舉例來說,您可以設定 Media CDN 後方的即時串流封裝程式,或是由 Cloud Service Mesh 管理的一組 Envoy Proxy,以便連回內部部署基礎架構。
負載平衡器可讓您設定後端,以用於下列項目:
- Compute Engine 虛擬機器 (VM) 執行個體群組。
- 網路端點群組 (包括 Compute Engine VM 和 Google Kubernetes Engine 叢集)。
- 無伺服器網路端點群組 (Cloud Run、App Engine 和 Cloud Run 函式)。
結合外部應用程式負載平衡器來源 (用於放送影片資訊清單) 和 Cloud Storage 來源 (用於儲存區段) 的架構如下所示,其中兩個來源會對應至不同路徑。
如要將外部應用程式負載平衡器設定為來源,您需要建立來源資源,並使用指向負載平衡器轉送規則的 IP 位址或公開主機名稱。 建議使用公開主機名稱 (網域名稱),因為 SSL (TLS) 憑證和新版 HTTP (HTTP/2 和 HTTP/3) 都需要這個名稱。
此外,請務必確認下列事項:
- 負載平衡器有符合您
EdgeCacheService
資源所用主機名稱的路徑,或您已為負載平衡器設為來源的路徑設定urlRewrite.hostRewrite
。 - 負載平衡器已為這些主機名稱設定公開信任的 SSL (TLS) 憑證。
舉例來說,如果指向負載平衡器轉送規則的公開網域名稱是 origin-packager.example.com
,則您需要建立來源,並將 originAddress
設為這個名稱。
主控台
前往 Google Cloud 控制台的「Media CDN」頁面。
按一下「來源」Origins分頁標籤。
按一下「建立來源」
。輸入來源名稱。例如
load-balancer-origin
。選用:輸入說明。
在「原始位址」中,選擇「指定 FQDN 或 IP 位址」。
輸入 Google Cloud 負載平衡器的 FQDN 或 IP 位址。
選用:選取容錯移轉來源,以防這個來源無法連線。您之後可以更新這個欄位。
在「Max attempts」(嘗試次數上限) 中,選取嘗試從這個來源填補快取的次數上限。
選用:指定下列逾時值:
- 在「連線逾時」部分,選取等待建立原始連線的最長時間。
- 在「回應逾時」部分,選取允許回應完成的最長時間。
- 在「讀取逾時」部分,選取單一 HTTP 連線或串流讀取作業之間的等待時間上限。
選用:按一下「新增標籤」,並指定一或多個鍵/值組合。
按一下「Create origin」(建立來源)。
gcloud
使用 gcloud edge-cache origins create
指令:
gcloud edge-cache origins create LB_ORIGIN \ --origin-address=LB_ADDRESS
更改下列內容:
LB_ORIGIN
:來源名稱LB_ADDRESS
:FQDN 或 IP 位址,例如origin-packager.example.com
如果您使用轉送規則的 IP 位址做為來源位址,或負載平衡器未附加 SSL 憑證,則可將通訊協定設為 HTTP
,改用未加密的連線。建議您只在開發或測試時這麼做。
設定彈性防護的區域
建立或更新來源時,您可以為彈性遮蔽設定區域。
gcloud
如要為現有來源中的區域設定彈性防護,請使用 gcloud edge-cache origins update
指令:
gcloud edge-cache origins update ORIGIN \ --origin-address=ADDRESS \ --flex-shielding=REGION
更改下列內容:
ORIGIN
:來源名稱ADDRESS
:來源的地址REGION
:來源防護的區域。有效值為africa_south1
和me_central1
。
如要將防護設定恢復為預設來源防護,請在將 flex-shielding
選項設為空白後,執行相同指令。
yaml
如要為現有來源中的區域設定來源防護,請在 EdgeCacheOrigin
資源設定中新增 flexShielding
區段:
name: ORIGIN
originAddress: ADDRESS
# ... Other fields
flexShielding:
flexShieldingRegions:
- REGION
# ... Other fields
更改下列內容:
ORIGIN
:來源名稱ADDRESS
:來源的地址REGION
:來源防護的區域。有效值為africa_south1
和me_central1
。
如要將來源防護還原為預設值,請移除 flexShielding
區段。
設定來源容錯移轉
下列各節說明如何設定來源容錯移轉行為。
不含重新導向追蹤的來源容錯移轉
以下是基本的容錯移轉 EdgeCacheOrigin
設定:
name: FAILOVER_ORIGIN
originAddress: FAILOVER_DOMAIN_NAME
Media CDN 最多會重試路徑的主要來源三次,然後嘗試容錯移轉來源。在這個設定中,Media CDN 會先嘗試主要來源三次,然後對 FAILOVER_ORIGIN
發出單一要求。如果容錯移轉來源也無法順利回應,Media CDN 會傳回整個來源回應,或是在未收到任何狀態碼時,傳回 HTTP 502 Bad Gateway
回應。
重試次數和容錯移轉事件越多,快取填入延遲時間就越長。增加原始逾時值 (例如 connectTimeout
) 會進一步影響快取填補延遲,因為等待超載或忙碌的原始伺服器回應的時間會增加。
以下範例說明如何設定,將填寫要求傳送至 MY_ORIGIN
。這項設定會導致 Media CDN 在發生連線錯誤 (例如 DNS、TCP 或 TLS 錯誤)、來源傳回 HTTP 5xx
回應,或 HTTP 404 Not Found
時重試。嘗試兩次後,系統會故障轉移至 FAILOVER_ORIGIN
。
系統會在設定的來源中嘗試連線,最多嘗試四次:原始嘗試一次,最多重試三次。您可以為每個來源設定 maxAttempts
值,決定在嘗試容錯移轉前要重試幾次。
name: MY_ORIGIN
originAddress: DOMAIN_NAME
maxAttempts: 2 # the number of attempts to make before trying the failoverOrigin
failoverOrigin: FAILOVER_ORIGIN
# what conditions trigger a retry or failover
retryConditions:
- CONNECT_FAILURE
- HTTP_5xx # any HTTP 5xx response
- NOT_FOUND # retry on a HTTP 404
timeout:
maxAttemptsTimeout: 10s # set a deadline for all retries and failover
重新導向後進行來源容錯移轉
舉例來說,假設您已設定下列 EdgeCacheOrigin
資源,且 EdgeCacheService
資源的路徑已設定為使用 PrimaryOrigin
填滿快取:
name: PrimaryOrigin
originAddress: "primary.example.com"
maxAttempts: 2
failoverOrigin: "SecondaryOrigin"
retryConditions: [CONNECT_FAILURE]
originRedirect:
redirectConditions: [FOUND, TEMPORARY_REDIRECT]
name: SecondaryOrigin
originAddress: "secondary.example.com"
maxAttempts: 3
originRedirect:
redirectConditions: [FOUND, TEMPORARY_REDIRECT]
在本例中,當 Media CDN 執行快取填入作業時,Media CDN 會讀取 PrimaryOrigin
的設定,並據此做出回應。
假設 Media CDN 連線至 primary.example.com
,這是嘗試聯絡來源的第 1 次。如果 primary.example.com
傳回成功的回應,Media CDN 會使用該回應填入快取。
假設 primary.example.com
現在會將 HTTP 302 Found Redirect
傳回至 Location: b.example.com
。然後,Media CDN 會嘗試第 2 次與來源聯絡,並按照重新導向前往 b.example.com
。在本例中,
Media CDN 會執行下列操作:
- 如果
b.example.com
傳回成功回應,Media CDN 會使用該回應填滿快取。 - 如果
b.example.com
傳回重新導向或失敗回應,Media CDN 會故障轉移至已設定的SecondaryOrigin
。這是因為在本例中,PrimaryOrigin
是為兩個maxAttempts
設定。
如果 Media CDN 容錯移轉至 SecondaryOrigin
,Media CDN 會使用 SecondaryOrigin
設定,並嘗試連線至 secondary.example.com
。這是第 1 次嘗試與來源聯絡,
也是第 3 次嘗試。
在這種情況下,Media CDN 會執行下列操作:
- 如果
secondary.example.com
傳回成功的回應,Media CDN 會使用該回應填入快取。 - 如果
secondary.example.com
將 HTTP302 Found Redirect
回傳至Location: c.example.com
,Media CDN 會嘗試與c.example.com
聯絡。在本例中,這是SecondaryOrigin
的第 2 次嘗試,也是整體第 4 次嘗試。
如果嘗試聯絡 c.example.com
時傳回成功的回應,Media CDN 會使用該回應填入快取。如果嘗試傳回 Media CDN 設定要追蹤的重新導向,Media CDN 會傳回 HTTP 502 Bad Gateway
狀態碼,因為系統已用盡與來源聯絡的嘗試次數上限。無論 EdgeCacheOrigin
設定為何,Media CDN 最多會嘗試所有來源四次。最後,如果 Media CDN 無法與 c.example.com
聯絡,Media CDN 會傳回 504 Gateway Timeout
回應或 502 Bad Gateway
回應。
如要對來源執行健康狀態檢查、輪詢或負載感知轉送,您可以將外部應用程式負載平衡器設定為主要來源。
設定來源重新導向
Media CDN 支援在快取填入期間,於內部追蹤原始伺服器傳回的重新導向,而不是直接將重新導向回應傳回給用戶端。如果 Media CDN 設定為追蹤來源重新導向,Media CDN 會先從重新導向位置擷取內容,再快取內容並將重新導向的回應傳回用戶端。Media CDN 會追蹤跨網域的重新導向。
最佳做法是只為您信任及控管的來源設定來源重新導向。請務必信任重新導向鏈結中的每個來源,因為每個來源都會產生由 EdgeCacheService
放送的內容。
如要啟用追蹤來源重新導向,請在 EdgeCacheOrigin
資源中加入下列設定:
name: MY_ORIGIN
originAddress: DOMAIN_NAME
maxAttempts: 2
originRedirect:
redirectConditions: [FOUND, TEMPORARY_REDIRECT]
Media CDN 會使用重新導向中指定的通訊協定,連線至所有伺服器。確認 Media CDN 可能重新導向的所有伺服器,都支援您需要的通訊協定。具體來說,如果通訊協定設為 HTTPS、HTTP/2 或 HTTP/3,Media CDN 不會改用 HTTP/1.1 連線,追蹤不安全的重新導向。傳送至重新導向來源的主機標頭與重新導向網址相符。媒體 CDN 會在每次EdgeCacheOrigin
嘗試時追蹤單一重新導向,然後傳回最終回應或評估重試或容錯移轉條件。
redirectConditions
設定會指定哪些 HTTP 回應代碼會導致 Media CDN 追蹤每個來源的重新導向。
條件 | 說明 |
---|---|
MOVED_PERMANENTLY | 針對 HTTP 301 回應代碼執行重新導向 |
找到 | 針對 HTTP 302 回應代碼執行重新導向 |
SEE_OTHER | 針對 HTTP 303 回應代碼執行重新導向 |
TEMPORARY_REDIRECT | 針對 HTTP 307 回應代碼執行重新導向 |
PERMANENT_REDIRECT | 針對 HTTP 308 回應代碼執行重新導向 |
設定來源專屬的主機重寫或標頭修改
如果來源需要來源專屬的主機重寫或標頭修改,請使用下列 originOverrideAction
設定範例進行設定:
name: FAILOVER_ORIGIN
originAddress: FAILOVER_ORIGIN_HOST"
originOverrideAction:
urlRewrite:
hostRewrite: FAILOVER_ORIGIN_HOST"
headerAction:
requestHeadersToAdd:
- headerName: "Authorization"
headerValue: "AUTH-KEY"
replace: true
如果路徑指向這個來源,則 originOverrideAction.hostRewrite
設定會優先於任何現有的標頭重寫設定。
您可以使用該特定來源要求的 requestHeadersToAdd
專屬來源標頭。常見用途是新增靜態 Authorization
標頭。
由於系統會在來源要求期間執行這些標頭操控作業,因此為每個來源新增的標頭會取代或附加至相同欄位名稱的現有標頭。根據預設,Media CDN 會附加至現有標頭。如要取代現有標頭,請將 headerAction.replace
設為 true
。
如要瞭解如何為每個路徑設定要求標頭,請參閱「設定自訂標頭」。
排解來源問題
如果來源的行為不如預期,請參閱這篇文章,瞭解如何排解來源問題。