你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
排查 Azure Front Door 常见问题
本文介绍如何排查在使用 Azure Front Door 配置时可能会遇到的常见路由问题。
其他调试 HTTP 标头
可以请求 Azure Front Door 返回额外的调试 HTTP 响应头。 有关详细信息,请参阅可选响应头。
数秒后来自 Azure Front Door 的 503 或 504 响应
症状
- 未通过 Azure Front Door 发送到后端的常规请求会成功。 通过 Azure Front Door 发送会导致 503 或 504 错误响应。
- 此 Azure Front Door 故障通常会在大约 30 秒后出现。
- 出现间歇性 503 错误并显示“ErrorInfo: OriginInvalidResponse”。
原因
此问题的原因可能是以下三种情况之一:
- 源接收来自 Azure Front Door 的请求所用的时间超过配置的超时。 默认超时值为 30 秒。
- 它发送对 Azure Front Door 请求的响应所用的时间超过了超时值。
- 客户端发送了包含 Accept-Encoding 标头的字节范围请求,这意味着已启用压缩。
疑难解答步骤
直接向源发送请求(不通过 Azure Front Door)。 看源通常需要多久才能进行响应。
通过 Azure Front Door 发送请求,看是否会收到任何 503 响应。 如果没有收到任何 503 响应,则问题可能与超时无关。 创建支持请求,以便进一步排查问题。
如果通过 Azure Front Door 发送的请求导致 503 错误响应代码,请为 Azure Front Door 配置“源响应超时”。 可以将默认超时延长到 4 分钟(240 秒)。 若要配置设置,请转到 Front Door 配置文件的概述页。 选择“源响应超时”,并输入介于 16 到 240 秒之间的值。
注意
配置 Origin 响应超时的功能仅在 Azure Front Door 标准版/高级版中可用。
如果延长超时无法解决问题,请使用 Fiddler 或浏览器开发人员工具来检查客户端是否正在发送包含“Accept-Encoding”标头的字节范围请求。 使用此选项会导致源使用不同的内容长度做出响应。
如果客户端使用 Accept-Encoding 标头发送字节范围请求,你有两种选择。 第一个选择是在源或 Azure Front Door 上禁用压缩。 第二个选择是,创建规则集规则,从字节范围请求的请求中删除 Accept-Encoding。
Azure Front Door 仅对 HTTPS 返回 503 响应
症状
- 只有 Azure Front Door 的已启用 HTTPS 的终结点才返回任何 503 响应。
- 未通过 Azure Front Door 发送到后端的常规请求会成功。 通过 Azure Front Door 发送则出现 503 错误响应。
- 出现间歇性 503 错误并显示“ErrorInfo: OriginInvalidResponse”。
原因
此问题的原因可能是以下三种情况之一:
- 后端池是一个 IP 地址。
- 后端服务器返回的证书与 Azure Front Door 后端池的完全限定的域名 (FQDN) 不匹配。
- 后端池是 Azure Web 应用服务器。
疑难解答步骤
后端池是一个 IP 地址。
必须禁用
EnforceCertificateNameCheck
。Azure Front Door 有一个名为
EnforceCertificateNameCheck
的开关。 此设置默认已启用。 启用后,Azure Front Door 将检查后端池主机名 FQDN 是否与后端服务器证书的证书名称或使用者备用名称扩展中的条目之一匹配。如何通过 Azure 门户禁用
EnforceCertificateNameCheck
:在门户中,使用切换按钮在 Azure Front Door(经典)“设计”窗格中打开或关闭此设置。
对于 Azure Front Door 标准和高级层,在将源添加到源组或配置路由时,可在源设置中找到此设置。
后端服务器返回的证书与 Azure Front Door 后端池的 FQDN 不匹配。 若要解决此问题,你有两个选择:
- 返回的证书必须与 FQDN 匹配。
- 必须禁用
EnforceCertificateNameCheck
。
后端池是 Azure Web 应用服务器:
- 检查是否为 Azure Web 应用配置了基于 IP 而不是基于 SNI(服务器名称指示)的 SSL。 如果 Web 应用配置为基于 IP,应更改为 SNI。
- 如果后端由于证书失败而运行不正常,将返回 503 错误消息。 可以在端口 80 和 443 上验证后端的运行状况。 如果只有端口 443 运行不正常,则可能是 SSL 的问题。 由于后端配置为使用 FQDN,因此我们知道它正在发送 SNI。
使用 OPENSSL 验证是否返回证书。 若要执行此检查,请使用
-servername
连接到后端。 后端应返回需要与后端池的 FQDN 匹配的 SNI:openssl s_client -connect backendvm.contoso.com:443 -servername backendvm.contoso.com
发送到自定义域的请求返回 400 状态代码
症状
- 你已创建 Azure Front Door 实例。 对域或前端主机发送请求时返回 HTTP 400 状态代码。
- 你已创建了自定义域到所配置的前端主机的 DNS(域名服务器)映射。 向自定义域主机名发送请求时返回 HTTP 400 状态代码。 它似乎没有路由到已配置的后端。
原因
如果没有为已添加为前端主机的自定义域配置传递规则,则会出现此问题。 需要为该前端主机显式添加传递规则。 即使已为 Azure Front Door 子域 (*.azurefd.net) 下的前端主机配置了传递规则,也是如此。
故障排除步骤
为自定义域添加传递规则,以将流量定向到选定的源组。
Azure Front Door 没有将 HTTP 重定向到 HTTPS
症状
Azure Front Door 具有将 HTTP 重定向到 HTTPS 的传递规则,但访问域时仍然始终使用 HTTP 作为协议。
原因
如果没有正确地为 Azure Front Door 配置传递规则,则会出现此行为。 当前配置不具体,并且可能有冲突的规则。
疑难解答步骤
对前端主机名发送请求时返回 411 状态代码
症状
你创建了 Azure Front Door 标准/高级实例并配置了:
- 前端主机。
- 包含至少一个源的源组。
- 将前端主机连接到源组的路由规则。
将请求发送到配置的前端主机时,你的内容似乎不可用,因为返回了 HTTP 411 状态代码。
对这些请求的响应可能还会在响应正文中包含 HTML 错误页,其中包含解释性说明。 例如“HTTP 错误 411。 请求必须分块或具有内容长度。”
原因
有多个可能的原因会导致此症状。 总体原因是 HTTP 请求不完全符合 RFC 标准。
例如,发送的 POST
请求没有 Content-Length 或 Transfer-Encoding 标头。 例如,使用 curl -X POST https://example-front-door.domain.com
。 此请求不符合 RFC 7230 中规定的要求。 Azure Front Door 会阻止它,并返回 HTTP 411 响应。 不会对此类请求进行日志记录。
此行为独立于 Azure Front Door 的 Web 应用程序防火墙 (WAF) 功能。 目前无法禁用此行为。 所有 HTTP 请求都必须满足要求,即使未使用 WAF 功能。
疑难解答步骤
- 验证请求是否符合必要的 RFC 中规定的要求。
- 记下请求响应中返回的任何 HTML 消息正文。 消息正文通常准确地说明了请求不符合标准的情况。
我的源配置为 IP 地址。
症状
源配置为 IP 地址。 源运行正常,但拒绝来自 Azure Front Door 的请求。
原因
Azure Front Door 在 SSL 握手期间将源主机名用作 SNI 标头。 由于源配置为 IP 地址,因此失败可能是由以下原因之一引起的:
- 如果证书名称检查已禁用,则造成该问题的原因可能在于源证书逻辑。 此逻辑可能会拒绝任何没有与证书匹配的有效主机头的请求。
疑难解答步骤
将源从 IP 地址更改为向其颁发与源证书匹配的有效证书的 FQDN。
后续步骤
- 了解如何创建 Front Door。
- 了解如何创建 Front Door 标准版/高级版。