自定义错误响应概览

借助全球外部应用负载均衡器,您可以在生成 HTTP 错误状态代码(4xx5xx)时自定义自己的错误响应。您可以为负载均衡器和后端实例生成的错误自定义错误响应。您还可以为 Google Cloud Armor 拒绝流量时生成的错误响应代码自定义错误响应。

下面是一个自定义错误页面示例,您可以使用自己的公司品牌信息和徽标、相关页面的链接以及自定义消息为面向外部的使用方应用配置错误响应。

自定义 HTTP 错误响应页面。
自定义 HTTP 错误响应页面

使用自定义错误响应政策,您可以为不同的 HTTP 错误状态代码、网址网域、网址路径以及 HTTP 请求标头和参数字段配置不同的错误响应。

返回自定义错误响应具有以下优势,从而帮助您改善用户的体验:

  • 提供一致的品牌体验
  • 提供背景和相关信息,以增强易用性和用户体验
  • 减轻停机时间和客户端错误的负面影响
  • 提高网络安全性

如果您未配置自定义错误响应政策,则系统会传送通用的不含品牌词的错误对象,如图 2 所示。

通用 HTTP 错误响应页面。
通用 HTTP 错误响应页面

使用场景

自定义错误响应功能适用于许多应用场景。本部分提供了几个概要示例。

定义您自己的维护页面

当您的后端运行状况不佳或处于维护模式时,您可以返回包含公司品牌塑造和信息的错误页面。您可以构建上下文错误页面,其中包含联络中心电话号码或用户应何时重新尝试访问网站等有用信息。您可以选择根据匹配错误条件(例如主机名和 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
网址路径

pathMatchers[].pathRules[].customErrorResponsePolicy

pathMatchers[].routeRules[].customErrorResponsePolicy

如果您在网址映射资源的多个级层配置自定义错误响应政策,系统会返回自定义错误报告在网址映射的最低级层指定的错误对象。在网址映射的较低级层定义的错误响应政策更具体,并且优先于在网址映射的较高级层定义的错误响应政策。

例如,只有在政策与错误条件匹配且没有在较低级层(即网址网域或网址路径)为错误代码定义任何匹配政策时,系统才会在负载均衡器级层应用自定义错误响应政策。同样,只有在政策与错误条件匹配且没有在较低级层(即网址路径)为错误代码定义任何匹配政策时,系统才会在网址网域级层应用自定义错误响应政策。如需详细了解此配置,请参阅为不同网域、路径和错误响应代码配置精细的自定义错误响应政策

指定多条错误响应规则以匹配 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 并使用自定义错误响应时的负载均衡器行为。

  1. 当负载均衡器收到请求时,它会检查 Cloud CDN 缓存。如果负载均衡器找到对用户请求的缓存响应,则负载均衡器会将缓存的响应返回给用户。此缓存响应可以是用户请求的内容,也可以是自定义错误对象。

  2. 如果发生缓存未命中,负载均衡器会处理请求并将其发送到后端。

  3. 如果后端提供非错误响应,则该响应会返回给最终用户。不过,如果客户端请求遇到错误(4xx5xx HTTP 响应代码),负载均衡器会尝试按照以下方式从您指定的错误服务中获取自定义错误对象:

    1. 负载均衡器会检查所有自定义错误响应政策,并获取与错误状态代码和其他匹配条件对应的自定义错误对象的适当路径。

    2. 负载均衡器会将对自定义错误对象的请求转发到您在自定义错误响应政策中指定的错误服务。术语“错误服务”是指提供自定义错误内容的后端存储桶或后端服务。

    3. 负载均衡器会将自定义错误对象返回给发出请求的客户端。它还会将该对象发送到 Cloud CDN,以便在 cdnPolicy.negativeCachingPolicy[].ttl 指定的时间段内缓存错误对象。

已为负载均衡器停用 Cloud CDN

如果 Cloud CDN 已停用,我们建议您使用后端存储桶作为错误服务,而不是后端服务。这是因为,如果 Cloud CDN 处于停用状态,后端服务将无法缓存内容;不过,后端存储分区具有内置缓存功能,即使 Cloud CDN 处于停用状态,也能缓存错误响应。

限制

  • 只有全球外部应用负载平衡器支持自定义错误响应。不支持区域模式和传统模式。

  • 如果无法从错误服务中提取自定义错误对象(例如,内容路径配置错误),则系统会传送一个通用的不含品牌词的错误对象。

  • 自定义错误响应政策不会监控或过滤错误服务返回的对象是否存在安全风险。因此,您应该谨慎消除漏洞并限制潜在暴露的影响。

  • 只有可公开读取的 Cloud Storage 存储分区支持自定义错误响应。

    为防止在使用 Cloud Storage 存储桶时发生错误配置,请查看常见的 Cloud Storage 最佳做法

  • 如果您的全球外部应用负载平衡器只有后端存储分区,自定义错误响应将不起作用。除后端存储桶外,您必须至少还有一个后端服务也连接到负载均衡器。

  • 系统不会将根据自定义错误响应的来源定义的任何自定义响应标头应用于传出响应。

价格

使用自定义错误响应无需额外费用。Google Cloud Load Balancing 采用标准价格。如需了解详情,请参阅价格

后续步骤