借助全球外部应用负载均衡器,您可以在生成 HTTP 错误状态代码(4xx
和 5xx
)时自定义自己的错误响应。您可以为负载均衡器和后端实例生成的错误自定义错误响应。您还可以为 Google Cloud Armor 拒绝流量时生成的错误响应代码自定义错误响应。
下面是一个自定义错误页面示例,您可以使用自己的公司品牌信息和徽标、相关页面的链接以及自定义消息为面向外部的使用方应用配置错误响应。
使用自定义错误响应政策,您可以为不同的 HTTP 错误状态代码、网址网域、网址路径以及 HTTP 请求标头和参数字段配置不同的错误响应。
返回自定义错误响应具有以下优势,从而帮助您改善用户的体验:
- 提供一致的品牌体验
- 提供背景和相关信息,以增强易用性和用户体验
- 减轻停机时间和客户端错误的负面影响
- 提高网络安全性
如果您未配置自定义错误响应政策,则系统会传送通用的不含品牌词的错误对象,如图 2 所示。
使用场景
自定义错误响应功能适用于许多应用场景。本部分提供了几个概要示例。
定义您自己的维护页面
当您的后端运行状况不佳或处于维护模式时,您可以返回包含公司品牌塑造和信息的错误页面。您可以构建上下文错误页面,其中包含联络中心电话号码或用户应何时重新尝试访问网站等有用信息。您可以选择根据匹配错误条件(例如主机名和 HTTP 错误代码)来自定义错误页面。
定义您自己的默认错误页面
您可以按特定错误代码设置自定义错误响应。例如,您可以为 401 (Unauthorized)
HTTP 响应代码设置一个带有“登录或注册”消息的错误页面。您还可以设置默认错误页面,其中包含所有其他 4xx
系列和 5xx
系列 HTTP 错误代码的公司品牌信息和其他相关信息。
为安全规则定义错误响应
您可以返回自定义错误页面,以获取 Google Cloud Armor 安全政策拒绝流量时生成的错误响应代码。您需要确保使用您在 Google Cloud Armor 安全规则中输入的同一 4xx
系列或 5xx
系列 HTTP 错误代码配置错误页面。
减轻停机时间的影响
在适用情况下,您可以将错误响应配置为返回 200 (OK)
HTTP 状态代码并提供静态网页,以便用户在停机时间内看到更多上下文相关实用信息,而不是错误页面。
根据客户端请求类型自定义错误响应
您可以根据 HTTP 请求标头和参数(例如 Content-Type
标头)自定义错误响应。将原始请求路由到错误服务时,路由可以考虑 Content-Type
标头来传送网页(对于来自浏览器的请求)或 JSON(对于来自 Web API 的请求)。
自定义错误响应政策的工作原理
您可以在网址映射资源的三个级层(负载均衡器级层、网址网域级层和网址路径级层)定义自定义错误响应政策。
负载均衡器级层。该政策应用于负载均衡器收到的所有流量。
网址网域级层。政策应用于定向到特定域名或主机名(例如
www.example.com
)的流量。网址路径级层。政策应用于定向到特定路径(例如
www.example.com/images/*
)的流量。在此级层,您还可以将高级匹配条件与 HTTP 请求标头和参数搭配使用,例如Content-Type:application/json
。
下表显示了在网址映射的负载均衡器级层、网址网域级层和网址路径级层应用的自定义错误响应政策。
政策级层 | API 字段 |
---|---|
负载均衡器 | urlMaps.defaultCustomErrorResponsePolicy |
网址网域 | pathMatchers[].defaultCustomErrorResponsePolicy |
网址路径 |
|
如果您在网址映射资源的多个级层配置自定义错误响应政策,系统会返回自定义错误报告在网址映射的最低级层指定的错误对象。在网址映射的较低级层定义的错误响应政策更具体,并且优先于在网址映射的较高级层定义的错误响应政策。
例如,只有在政策与错误条件匹配且没有在较低级层(即网址网域或网址路径)为错误代码定义任何匹配政策时,系统才会在负载均衡器级层应用自定义错误响应政策。同样,只有在政策与错误条件匹配且没有在较低级层(即网址路径)为错误代码定义任何匹配政策时,系统才会在网址网域级层应用自定义错误响应政策。如需详细了解此配置,请参阅为不同网域、路径和错误响应代码配置精细的自定义错误响应政策。
指定多条错误响应规则以匹配 HTTP 错误响应代码
在自定义错误响应政策中的任何级层,您都可以指定多条错误响应规则。这些规则可以将 HTTP 错误响应与特定错误代码或一系列错误代码进行匹配。如果您指定了一系列错误代码的规则以及针对特定错误代码的规则,则具有特定错误代码的规则优先。
例如,假设您为 401 (Unauthorized)
错误代码配置了一条规则,而为所有 4xx
系列错误代码配置了另一条规则。如果后端服务返回 401
错误代码,则系统会应用与 401
错误匹配的规则。但是,如果后端服务返回 403
错误代码,则 4xx
错误的规则会生效。
替换 HTTP 响应代码
通过错误响应规则,您可以修改负载均衡器返回的 HTTP 响应代码。这实质上意味着您可以替换服务器生成的响应代码,并定义请求的最终响应代码应该是什么。您可以指定返回任何 HTTP 响应代码,包括 200 (OK)
、4xx
系列或 5xx
系列响应代码,或任何其他三位数响应代码。如需详细了解如何替换响应代码,请参阅为特定主机的特定错误代码配置错误页面。
如果您定义了替换响应代码,系统会在负载均衡日志中将其捕获为新字段 overrideResponseCodeServed
。仅当自定义错误响应政策应用替换响应代码时,才会填充此字段。
记录在 httpRequest
字段中的 status
代码不受影响。它会捕获服务器生成的 HTTP 响应代码或负载平衡器返回的 HTTP 响应。如果响应代码由自定义错误响应政策修改,则此状态代码可能与向客户端提供的实际代码不同。
缓存自定义错误响应
您可以为生成错误的后端指定负缓存政策,以缓存自定义错误响应。这样做的原因是针对常见错误或重定向应用精细缓存控制。这可减少来源的负载,并通过缩短响应延迟时间来提升最终用户体验。
为生成错误的后端定义的负缓存政策始终优先于在错误服务中为错误对象定义的 Cache-Control
元数据。此外,如果负载平衡器返回替换响应代码,则系统会根据替换响应代码的值(而不是根据后端返回给负载平衡器的原始响应代码)应用负缓存政策。如果系统以替换响应代码的形式返回非错误代码 (HTTP 200
),则不会应用负面缓存政策。
如果失败响应的存留时间 (TTL) 尚未过期,负载平衡器会继续提供缓存内容,而不会将请求路由到后端服务或后端存储分区。不过,这种行为取决于是否为负载平衡器启用了 Cloud CDN。
为负载平衡器启用了 Cloud CDN
本部分介绍了启用 Cloud CDN 并使用自定义错误响应时负载平衡器的行为。
当负载平衡器收到请求时,它会检查 Cloud CDN 缓存。如果负载平衡器找到对应于用户请求的缓存的响应,则会将缓存的响应返回给用户。此缓存响应可以是用户请求的内容,也可以是自定义错误对象。
如果发生缓存未命中,请求会由负载平衡器处理并发送到后端。
如果后端提供非错误响应,则会将该响应返回给最终用户。但是,如果客户端请求遇到错误(
4xx
或5xx
HTTP 响应代码),负载平衡器会尝试通过以下方式从您指定的错误服务获取自定义错误对象:负载平衡器会检查所有自定义错误响应政策,并获取与错误状态代码和其他匹配条件对应的自定义错误对象的适当路径。
负载平衡器会将自定义错误对象的请求转发到您在自定义错误响应政策中指定的错误服务。术语错误服务是指提供自定义错误内容的后端存储分区或后端服务。
负载平衡器会将自定义错误对象返回给发出请求的客户端。它还会将该对象发送到 Cloud CDN,以便在
cdnPolicy.negativeCachingPolicy[].ttl
指定的时间内缓存错误对象。
已为负载平衡器停用 Cloud CDN
如果 Cloud CDN 处于停用状态,我们建议使用后端存储分区作为错误服务,而不是后端服务。这是因为,如果 Cloud CDN 处于停用状态,后端服务无法缓存内容;但后端存储分区具有内置缓存功能,即使 Cloud CDN 处于停用状态,也能缓存错误响应。
限制
只有全球外部应用负载平衡器支持自定义错误响应。不支持区域模式和传统模式。
如果无法从错误服务中提取自定义错误对象(例如,内容路径配置错误),则系统会传送一个通用的不含品牌词的错误对象。
自定义错误响应政策不会监控或过滤错误服务返回的对象是否存在安全风险。因此,您应该谨慎消除漏洞并限制潜在暴露的影响。
自定义错误响应仅适用于可公开读取的 Cloud Storage 存储分区。
为防止在使用 Cloud Storage 存储桶时发生错误配置,请查看常见的 Cloud Storage 最佳做法。
价格
使用自定义错误响应无需额外费用。Google Cloud Load Balancing 采用标准价格。如需了解详情,请参阅价格。