概要
本文介绍 Azure 应用程序网关为何返回特定的 HTTP 响应代码。 它提供常见原因和故障排除步骤,可帮助你确定错误 HTTP 响应代码的根本原因。 应用程序网关可以向客户端请求返回 HTTP 响应代码,无论它是否启动与后端目标的连接。
注释
如果客户端连接在应用程序网关返回任何 HTTP 响应之前失败,则失败可能是传输层安全性(TLS)握手失败。 常见原因包括 TLS 版本不匹配(例如,客户端使用 TLS 1.0 或 1.1,而网关需要 TLS 1.2 或更高版本)和不支持的密码套件。 从 2025 年 8 月 31 日开始,Azure 应用程序网关停止对 TLS 1.0 和 1.1 的支持。 有关详细信息,请参阅 应用程序网关 TLS 策略概述 和 配置 TLS 策略版本和密码套件。
3XX 响应代码(重定向)
当客户端请求与配置了重定向的应用程序网关规则匹配时,应用程序网关将返回 300-399 响应。 可以按原样或通过路径映射规则配置重定向。 有关重定向的详细信息,请参阅应用程序网关重定向概述。
301 永久重定向
当指定具有 永久 值的重定向规则时,应用程序网关将返回 HTTP 301 响应。
302 已找到
使用 Found 值指定重定向规则时,应用程序网关将返回 HTTP 302 响应。
303 请参阅其他
使用 “查看其他 ”值指定重定向规则时,应用程序网关返回 HTTP 303 响应。
307 临时重定向
使用 临时 值指定重定向规则时,应用程序网关返回 HTTP 307 响应。
4XX 响应代码(客户端错误)
400-499 响应代码表示由客户端引起的问题。 这些问题的范围从客户端启动请求到不匹配的主机名、请求超时、未经身份验证的请求、恶意请求等。
应用程序网关收集用于捕获 4xx/5xx 状态代码分布的指标,并具有一种日志记录机制,用于捕获包含响应代码的 URI 客户端 IP 地址等信息。 指标和日志记录让进一步排除故障成为可能。 客户端还可以从客户端设备和应用程序网关之间的其他代理接收 4xx 响应。 例如,CDN(内容分发网络)和其他身份验证提供程序。 有关详细信息,请参阅以下文章。
400 – 错误的请求
在以下情况下,通常会看到 HTTP 400 响应代码:
- 你使用 HTTP 或 HTTPS 侦听器向应用程序网关发送非 HTTP 或 HTTPS 流量。
- 您通过 HTTPS 向侦听器启动 HTTP 流量,且未配置重定向。
- 配置双向认证,但应用程序网关无法进行有效协商。
- 请求不符合 RFC。
请求不符合 RFC 的一些常见原因是:
| 类别 | 例子 |
|---|---|
| 请求行中的主机名无效 | 包含两个冒号的主机名 (example.com:8090:8080) |
| 缺少主机头 | 请求不包含主机头 |
| 字符格式错误或非法 | 保留字符为 &,!.解决方法是将其编码为百分比。 例如:%& |
| HTTP 版本无效 | Get /content.css HTTP/0.3 |
| 标头字段名称和 URI 包含非 ASCII 字符 | GET /«úü¡»¿.doc HTTP/1.1 |
| POST 请求缺少 Content-Length 标头 | 自释性 |
| HTTP 方法无效 | GET123 /index.html HTTP/1.1 |
| 标头重复 | Authorization:<base64 编码内容>,Authorization: <base64 编码内容> |
| Content-Length 中的值无效 | Content-Length: abc,Content-Length: -10 |
配置相互身份验证时,多个方案可能会导致客户端返回 HTTP 400 响应,包括:
- 启用相互身份验证,但未显示客户端证书。
- 启用可分辨名称(DN)验证,客户端证书的 DN 与指定证书链的 DN 不匹配。
- 客户端证书链与定义的 SSL 策略中配置的证书链不匹配。
- 客户端证书已过期。
- 启用联机证书状态协议(OCSP)客户端吊销检查后证书被吊销。
- 启用 OCSP 客户端吊销检查,但应用网关无法联系 OCSP 响应方。
- 启用 OCSP 客户端吊销检查,但证书中未提供 OCSP 响应程序。
若要详细了解如何排查相互身份验证故障,请参阅错误代码故障排除。
401 - 未授权
如果客户端无权访问资源,应用程序网关会向客户端返回 HTTP 401 未经授权的响应。 有几种原因导致 401 返回。 以下列表提供了一些可能修复的原因。
- 如果客户端具有访问权限,则可能具有过时的浏览器缓存。 清除浏览器缓存,然后再次尝试访问应用程序。
如果使用 NTLM 身份验证配置后端池,Application Gateway 可能会返回对 AppGW 探测器请求的 HTTP 401 未经授权的响应。 在此方案中,应用程序网关将后端标记为正常。 使用以下方法之一解决此问题:
- 允许在后端池中进行匿名访问。
- 将探测配置为将请求发送到另一个不需要 NTLM 的“假”站点。
- 不建议这样做,因为此解决方案不会告诉我们应用程序网关后面的实际站点是否处于活动状态。
- 配置应用程序网关以允许 401 响应对探测有效:探测匹配条件。
403 - 已禁止
使用 WAF(Web 应用程序防火墙)SKU 并在阻止模式下配置 WAF 时,应用程序网关提供 HTTP 403 禁止访问。 如果启用 WAF 规则集或自定义拒绝 WAF 规则与入站请求的特征匹配,则应用程序网关向客户端提供 403 禁止响应。
若要排查 WAF 误报问题(WAF 规则阻止的合法请求):
- 启用 WAF 诊断日志 并查看
ruleId_s字段,以确定阻止请求的规则。 - 暂时将 WAF 切换到 检测模式 以记录匹配规则,而不会阻止流量。 在进行规则更改之前,此方法可帮助你确认误报。 有关详细信息,请参阅 WAF 策略设置。
- 为触发误报的特定请求属性(如标头、Cookie 或参数)创建 WAF 排除项。
- 如果托管规则持续导致误报,并且排除项不够有效,请在 WAF 策略中禁用该特定规则。
有关详细指南,请参阅 应用程序网关 WAF 故障排除 和 WAF 最佳做法。
客户端收到 403 响应的其他原因包括:
- h2c 协议升级尝试:当客户端尝试使用 h2c 协议(HTTP/2 Cleartext)从 HTTP/1.1 升级到 HTTP/2.0 时,应用程序网关将返回 403 错误。 应用程序网关仅支持基于 TLS 的 HTTP/2(HTTPS 侦听器)。 它不支持通过 HTTP 侦听器升级 h2c 协议。 无论 WAF 模式如何,都会发生此行为。 客户端应通过 HTTPS 使用本机 HTTP/2 连接,或者在不尝试升级的情况下保留在 HTTP/1.1 上。
- 你使用应用服务作为后端,并且已将其配置为仅允许从应用程序网关进行访问。 此配置可能会由应用程序服务返回 403 错误。 此错误通常是由于重定向或 href 链接直接指向应用服务,而不是指向应用程序网关的 IP 地址。
- 如果您访问存储 Blob,并且应用程序网关和存储终结点位于不同的地区,那么如果应用程序网关的公共 IP 地址不在白名单中,将返回 403 错误。 请参阅允许从某个范围内的 Internet IP 进行访问。
404 - 找不到页面
向应用程序网关(V2 SKU)发出请求时,会生成 HTTP 404 响应,该主机名不对应于任何配置的多站点侦听器,并且不存在基本侦听器。 若要了解详细信息,请参阅 侦听器类型。
408 - 请求超时
当对应用程序网关的前端侦听器的客户端请求在 60 秒内不响应时,可以观察到 HTTP 408 响应。 可能会因本地网络与 Azure 之间的流量拥堵、虚拟设备检查流量、或客户端因流量过载而感到不堪重负而观察到此错误。
413 - 请求实体太大
在 应用程序网关上使用 Azure Web 应用程序防火墙 时,可以观察 HTTP 413 响应,客户端请求大小超过最大请求正文大小限制。 请求正文大小上限字段控制不包括任何文件上传的总请求大小限制。 请求正文大小的默认值为 128 KB。 有关详细信息,请参阅 Web Application Firewall 请求大小限制。
499 - 客户端关闭连接
在使用 v2 SKU 的应用程序网关中,如果客户端请求在服务器完成响应之前被关闭,则会返回 HTTP 499 响应。 可以在两种情况下观察到此错误。 第一种情况是将一个大型响应返回给客户端,而客户端在服务器完成发送该大型响应之前已关闭或刷新其应用程序。 第二种情况是客户端的超时时间设置得比较短,导致等待时间不足,无法从服务器接收到响应。 在这种情况下,最好增加客户端上的超时。 在使用 v1 SKU 的应用程序网关中,如果客户端在服务器完成响应之前关闭连接,可能会引发 HTTP 0 响应代码。
5XX 响应代码(服务器错误)
500-599 响应代码指示执行请求时应用程序网关或后端服务器出现问题。
500 - 内部服务器错误
Azure 应用程序网关不应返回 500 个响应代码。 如果看到此代码,请创建支持请求,因为此问题属于服务内部错误。 有关如何打开支持案例的信息,请参阅 创建Azure support请求。
502 – 网关错误
HTTP 502 错误可能有多种根本原因,包括:
- NSG(网络安全组)、UDR(用户定义的路由)或自定义 DNS 阻止访问后端池成员。
- 虚拟机规模集的后端 VM 或实例未响应默认的运行状况探测。
- 自定义运行状况探测的配置无效或不正确。
- Azure Application Gateway 的 后端池未配置或为空。
- 虚拟机规模集中没有正常运行的 VM 或实例。
- 请求超时或连接问题,与用户请求相关的 Azure 应用程序网关 V1 SKU 会发送 HTTP 502 错误,如果后端响应时间超过在后端设置中配置的超时值。
若要了解哪些情况下会发生 502 错误以及如何进行故障排查,请参阅排查“错误的网关”错误。
503 - 服务不可用
HTTP 503 响应指示应用程序网关或后端服务器暂时无法处理请求。 常见原因包括:
- 所有后端池成员都运行不正常,由运行状况探测确定,并且没有正常的服务器可用于处理请求。
- 后端服务器过载或正在进行维护,并将 503 直接返回到应用程序网关。
- 应用程序网关 V2 自动缩放正在进行中,且新实例尚未准备好处理流量。
- 在应用程序网关或后端服务器上,连接数达到了限制。
为了排除 503 错误,请:
- 在 Azure 门户中检查 “后端运行状况 ”窗格,验证后端池成员状态。
- 查看运行状况探测配置,以确保探测不会错误地将正常的后端标记为不正常。 有关更多信息,请参阅 健康探针概览。
- 通过直接访问后端应用程序来验证后端应用程序是否正常运行,从而绕过应用程序网关。
- 检查应用程序网关指标,了解 Azure Monitor 中的连接计数和容量单位利用率。
- 对于 V2 SKU,请查看自动缩放设置,以确保流量高峰期间有足够的最小实例计数。
有关详细信息,请参阅 排除后端运行状况故障。
504 - 网关超时
如果后端响应时间超过在后端设置中配置的超时值,Azure 应用程序网关 V2 SKU 将发送 HTTP 504 错误。
IIS (Internet Information Services Web 服务器)
如果后端服务器是 IIS,请参阅 网站的默认限制 来设置超时值。 有关详细信息,请参阅属性“connectionTimeout”。 确保 IIS 中的连接超时与后端设置中的超时相匹配或不超过后者。
Nginx
如果后端服务器为 Nginx 或 Nginx 入口控制器,并且它具有上游服务器,请确保 nginx:proxy_read_timeout 的值与后端设置中的超时值相匹配,或不超过该超时值。
故障排除方案
访问日志中的“ERRORINFO_INVALID_HEADER”错误
问题: 访问日志 显示请求的“ERRORINFO_INVALID_HEADER”错误,即使后端响应代码(serverStatus)为 200。 在其他情况下,后端服务器返回 500。
原因:客户端发送包含 CR LF 字符的标头。
解决方案:将 CR LF 字符替换为 SP(空格),并将请求重新发送给应用程序网关。