您可以通过多种方式为媒体 CDN 配置源。此页面显示了 了解如何配置源站。
将 Cloud Storage 存储桶配置为来源
Media CDN 支持将 Cloud Storage 存储桶用作内容后端。每项服务都可以引用多个存储分区 主机、路径和其他请求属性的路由。
若要配置 Cloud Storage 存储桶,请在创建来源资源时将存储桶网址(例如 gs://my-bucket
)用作来源地址。
控制台
在 Google Cloud 控制台中,前往 Media CDN Origins(来源)页面。
点击创建源站。
输入来源的名称。例如:
cloud-storage-origin
。可选:输入说明。
对于源地址,选择选择 Google Cloud Storage 存储桶。
浏览到您的 Cloud Storage 存储桶并选择它。
对于 Cloud Storage,保留默认的协议和端口设置。
可选:对于源请求标头替换 优先于客户端发送的标头或 路由级标头操作,请执行以下操作:
- 选择启用源替换项。
- 在 Headers(标头)部分,通过添加一个或多个 名称-值对
可选:选择一个故障切换来源,以便在此来源变为 无法访问。您可以稍后更新此字段。
选择重定向条件。
选择重试条件。
对于尝试次数上限,请选择填充缓存的尝试次数上限 来自此来源的消息。
可选:指定以下超时 值:
- 对于连接超时,请选择等待建立源连接的超时时长上限。
- 对于响应超时,请选择 响应完成。
- 对于读取超时,请选择需等待的最长时长 单个 HTTP 连接或数据流的读取。
可选:点击添加标签,然后指定一个或多个键值对。
点击创建源站。
gcloud
使用 gcloud edge-cache origins create
命令:
gcloud edge-cache origins create ORIGIN \ --origin-address=ADDRESS
替换以下内容:
ORIGIN
:新源的名称ADDRESS
:存储桶名称,例如gs://my-bucket
无论存储桶是多区域、双区域还是单区域,都适用此规则。
配置服务时,您可以将自己的视频点播内容
并将直播内容传输到第二个存储桶。如果您有不同的团队管理各个工作流,这会非常有用。如需缩短缓存填充延迟时间,您可以执行以下操作:
同样地将 eu-media.example.com
区域路由到一个多区域
位于欧盟和 us-media.example.com
的 Cloud Storage 存储桶
区域(或路径、标头或查询参数匹配)映射到位于美国的存储
存储桶。
对于写入延迟时间至关重要的情况(例如低延迟直播),您可以配置尽可能靠近用户的区域性 Cloud Storage 端点。
对请求进行身份验证
如需确认请求是否来自媒体 CDN,请执行以下操作: 请使用以下任一受支持的方法:
- 验证连接的 IP 地址是否来自媒体 CDN
缓存填充范围的数据这些范围会供所有客户共享,但
EdgeCacheService
资源在连接到来源时始终会使用这些范围。 - 添加一个自定义请求标头,其中包含您在源端验证的令牌值(例如,一个 16 字节的随机值)。然后,您的源可以拒绝请求 包含该值的过滤器
配置源协议
对于仅支持 HTTPS(通过 TLS 的 HTTP/1.1)或 HTTP/1.1(不使用 TLS)的来源,请执行以下操作以明确设置 protocol
字段:
控制台
在 Google Cloud 控制台中,前往媒体 CDN Origins页面。
选择您的来源,然后点击修改。
对于协议,请选择 HTTPS 或 HTTP。对于 HTTP,还要 将端口指定为
80
。点击更新来源。
gcloud
使用 gcloud edge-cache origins update
命令:
gcloud edge-cache origins update LEGACY_ORIGIN \ --protocol=HTTPS
如果您的源支持 HTTP/2,则无需明确设置协议。
配置专用 Cloud Storage 存储分区
媒体 CDN 可以从任何可通过互联网访问的 HTTP 或 HTTPS 拉取内容 端点。在某些情况下,您可能需要进行身份验证, 仅允许媒体 CDN 拉取内容,并防止未经授权的人员 访问权限。Cloud Storage 通过 IAM 权限。
对于 Cloud Storage 源站,请执行以下操作:
- 向 Media CDN 服务账号授予对您用作源的 Cloud Storage 存储桶的
objectViewer
IAM 权限。 - 移除
allUsers
权限。 - 可选:移除
allAuthenticatedUsers
权限。
如需更改 Cloud Storage 存储桶的权限,您需要拥有 Storage Admin IAM 角色。
Media CDN 服务账号归 Media CDN 项目所有,不会显示在项目的服务账号列表中。
该服务账号采用以下格式,并且仅会授予对您明确允许的项目中的 Media CDN 资源的访问权限。
service-PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com
如需向 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
使用 gcloud storage buckets remove-iam-policy-binding
命令移除为给定存储桶授予 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
访问存储桶对象。
如需允许一个项目中的 EdgeCacheService
资源访问另一个项目中的 Cloud Storage 存储桶,您可以向该项目中的 Media CDN 服务账号授予对该存储桶的访问权限。
为此,请确保PROJECT_NUM
service-PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com
是
项目(包含需要的 EdgeCacheService
资源的项目的项目编号)
访问权限。您可以针对多个项目重复此操作,尤其是当其中某些项目
托管不同的媒体 CDN 环境(例如开发环境、
预演版或生产版),并且有一个包含您的视频或媒体的单独项目
资源。
您可以保护对 Cloud Storage 源站的访问权限,而无需启用 签名请求。
配置专用 Cloud Storage 不会阻止缓存内容 无法直接从媒体 CDN 访问。相关信息 有关如何向单个用户发出签名请求的信息,请参阅已签名请求 请求。
将外部应用负载均衡器配置为源站
如果您需要主动健康检查、轮循或负载感知型导向 跨 Compute Engine、GKE 或本地源站 您可以配置一个外部应用负载平衡器 作为来源。
这样你就可以配置(例如)实时流式传输的打包器 媒体 CDN 或一组 由 Cloud Service Mesh 管理的 Envoy 代理 从而连接回您的本地基础架构
借助负载均衡器,您可以为以下各项配置后端:
- Compute Engine 虚拟机实例组。
- 网络端点组(包括 Compute Engine 虚拟机和 Google Kubernetes Engine 集群)。
- 无服务器网络端点组 (Cloud Run、App Engine 和 Cloud Run 函数)。
将用于分发视频清单的外部应用负载均衡器源与用于分段存储的 Cloud Storage 源相结合的架构如下所示,其中两个源映射到不同的路线。
如需将外部应用负载平衡器配置为来源,您需要 使用 IP 地址或公开主机名指向您的 IP 地址的 负载均衡器的转发规则。 最好使用公开主机名(域名),因为这在使用 SSL 时是必需的 (TLS) 证书;以及适用于现代 HTTP 版本(HTTP/2 和 HTTP/3)。
您还必须确保:
- 您的负载均衡器有一个路由与
EdgeCacheService
资源使用的主机名匹配,或者您已为将负载均衡器配置为源的路由配置了urlRewrite.hostRewrite
。 - 您的负载均衡器配置了受大众信任的 SSL (TLS) 证书 设置 IP 地址范围
例如,如果公共域名指向负载均衡器的
转发规则为 origin-packager.example.com
,则您需要创建一个
并将 originAddress
设置为此名称。
控制台
在 Google Cloud 控制台中,前往媒体 CDN Origins页面。
点击创建源站。
输入来源的名称。例如:
load-balancer-origin
。可选:输入说明。
对于源地址,选择指定 FQDN 或 IP 地址。
输入 Google Cloud 负载均衡器的 FQDN 或 IP 地址。
可选:选择一个故障切换来源,以备此来源无法访问时进行尝试。您可以稍后更新此字段。
选择重试条件。
在尝试次数上限部分,选择尝试填充此来源的缓存的最大次数。
可选:指定以下超时 值:
- 对于连接超时,请选择等待建立源连接的超时时长上限。
- 对于响应超时,请选择 响应完成。
- 对于读取超时,请选择需等待的最长时长 单个 HTTP 连接或数据流的读取。
可选:点击添加标签,然后指定一个或多个键值对。
点击创建源站。
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
以回退到未加密的连接。我们建议
您仅将其用于开发或测试。
配置来源故障切换
以下部分介绍了如何配置来源故障切换行为。
不跟踪重定向的来源故障切换
以下是基本的故障切换 EdgeCacheOrigin
配置:
name: FAILOVER_ORIGIN
originAddress: FAILOVER_DOMAIN_NAME
媒体 CDN 最多重试路线的主要源站 3 次
次数。在此配置中,在尝试主源站三次后,Media CDN 会尝试对 FAILOVER_ORIGIN
发出单次请求。如果
故障切换来源也无法成功响应,则
媒体 CDN 要么返回整个源响应,要么返回
收到状态代码,则会收到 HTTP 502 Bad Gateway
响应。
缓存填充延迟时间会随着重试次数和故障切换事件数的增加而增加。
进一步增加源站超时值(例如 connectTimeout
)
会影响缓存填充延迟时间,因为它会增加等待
超载或繁忙的源服务器作出响应。
以下示例演示了向 MY_ORIGIN
发送填充请求的配置。此配置会导致 Media CDN 在出现连接错误(例如 DNS、TCP 或 TLS 错误)、来自源的 HTTP 5
xx 响应或 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
的配置并相应地做出响应。
假设媒体 CDN 以如下身份连接到 primary.example.com
:
尝试第 1 次联系来源如果 primary.example.com
返回成功响应,Media CDN 会将该响应用于缓存填充。
假设 primary.example.com
现在返回一个 HTTP 302 Found Redirect
,
Location: b.example.com
。然后,在尝试第 2 次与源站联系时,Media CDN 会遵循重定向到 b.example.com
的操作。在此示例中
媒体 CDN 具有以下功能:
- 如果
b.example.com
返回成功响应,则媒体 CDN 使用该响应进行缓存填充。 - 如果
b.example.com
返回重定向或失败响应, 媒体 CDN 会向配置的SecondaryOrigin
进行故障切换。 这是因为,在此示例中,PrimaryOrigin
配置为maxAttempts
。
如果媒体 CDN 故障切换到 SecondaryOrigin
,
媒体 CDN 使用 SecondaryOrigin
配置并尝试
以连接到 secondary.example.com
。这是第 1 次尝试联系源站
第 3 次尝试。
在这种情况下,媒体 CDN 将执行以下操作:
- 如果
secondary.example.com
返回成功响应, 媒体 CDN 使用该响应进行缓存填充。 - 如果
secondary.example.com
向Location: c.example.com
返回 HTTP302 Found Redirect
,则媒体 CDN 会尝试与c.example.com
。在此示例中,这是针对SecondaryOrigin
的第 2 次尝试 第 4 次尝试。
如果尝试与 c.example.com
联系返回成功响应,Media CDN 会将该响应用于缓存填充。如果尝试返回了媒体 CDN 配置为遵循的重定向,则媒体 CDN 会返回 HTTP 502 Bad Gateway
错误,因为它已耗尽与源站联系的最大尝试次数。无论 EdgeCacheOrigin
配置如何,Media CDN 最多会对所有源站进行四次尝试。最后,如果
媒体 CDN 未能连接 c.example.com
,
媒体 CDN 会返回 504 Gateway Timeout
响应或
502 Bad Gateway
响应。
如果您需要执行健康检查、轮循或负载感知型导向 你可以配置 外部应用负载平衡器作为主实例 来源。
配置以下源重定向
媒体 CDN 支持源站返回的以下重定向 在缓存填充期间内部,而不是直接返回重定向响应 。将媒体 CDN 配置为跟随源站时 重定向,媒体 CDN 会从重定向位置检索内容 然后再缓存并将重定向的响应返回给客户端。 媒体 CDN 会跟踪跨网域重定向。
最佳实践是仅为您信任且控制的来源配置来源重定向。请确保您信任重定向链中的每个源站,因为
每个来源都会生成由您的 EdgeCacheService
传送的内容。
如需启用跟踪来源重定向,请将以下配置添加到 EdgeCacheOrigin
资源:
name: MY_ORIGIN
originAddress: "DOMAIN_NAME"
maxAttempts: 2
originRedirect:
redirectConditions: [FOUND, TEMPORARY_REDIRECT]
Media CDN 使用重定向中指定的协议来访问所有服务器。确保媒体 CDN 可能
以支持您所需的协议。
具体而言,如果协议设置为 HTTPS、HTTP/2 或 HTTP/3,Media CDN 不会回退为 HTTP/1.1 连接来遵循不安全的重定向。发送到重定向源的主机标头与
重定向网址。媒体 CDN 会根据
在返回最终响应或评估之前尝试 EdgeCacheOrigin
次
重试或故障切换条件。
redirectConditions
设置用于指定哪些 HTTP 响应代码会导致 Media CDN 针对每个源站遵循重定向。
条件 | 说明 |
---|---|
MOVED_PERMANENTLY | 针对响应代码 HTTP 301 遵循重定向 |
FOUND | 针对响应代码 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
。
如需了解如何为每个路由设置请求标头,请参阅 设置自定义标头。
排查起源
如果某个来源未按预期运行,请参阅如何排查来源问题。