HTTPQUERY
English

502 Bad Gateway

用法

502 Bad Gateway 状态码表示服务器正作为上游服务器的代理或网关。在转发 HTTP 请求后,上游服务器返回了无效的响应。解决此问题所需的时间难以预测。

当源站服务器返回 HTTP 错误状态码时,预期会将相同的状态码及相关信息转发给客户端,以便对问题作出最准确的描述。

当代理根本未从上游服务器收到任何响应时,504 Gateway Timeout 状态码更为合适。

注意

502 Bad Gateway 意味着代理从后端收到了无效的响应。后端做出了响应,但响应格式错误或出乎意料。504 Gateway Timeout 意味着后端在超时时间内根本没有响应。502 指向后端崩溃或协议错误,而 504 指向后端缓慢或不可达。这两个状态码都不表示客户端做错了任何事。

SEO 影响

Googlebot 将 5xx 错误视为暂时降低整个站点抓取速率的信号。已被索引的 URL 起初会被保留,但长时间的停机会导致 Google 将它们从索引中剔除。任何随 502 响应返回的内容都会被忽略。在这方面,Google 对 500、502 和 503 一视同仁。robots.txt 文件上的 5xx 错误要严重得多,即便站点上其他每个页面都返回 200。Google 会暂停抓取长达 12 小时,然后回退到缓存副本长达 30 天。如果错误持续,Google 会将该站点完全从索引中移除。Bingbot 同样将 5xx 响应视为抓取失败。持续的 5xx 错误会阻止在 Bing 中被索引。

示例

客户端请求某个资源,服务器返回 502 Bad Gateway 状态码,因为上游服务器返回了无效的响应。

请求

GET /news HTTP/1.1
Host: example.com

响应

HTTP/1.1 502 Bad Gateway
Content-Type: text/html; charset=UTF-8
Content-Length: 134

<html>
  <head>
    <title>Bad Gateway</title>
  </head>
  <body>
    <p>The server is unreachable at this time.</p>
  </body>
</html>

如何修复

首先检查 /var/log/nginx/error.log 或等效的代理错误日志。日志消息会指明上游的失败模式:连接被拒绝、连接过早关闭,或无效的头部。

常见根本原因及其修复方法:

在 Apache 反向代理配置中,检查 ProxyPass/ProxyPassReverse 指令,并确认已启用 mod_proxy 和 mod_proxy_http。在重启前运行 apachectl configtest。

应用修复后,运行 nginx -t 校验配置,然后重新加载。

代码参考

.NET

HttpStatusCode.BadGateway

Rust

http::StatusCode::BAD_GATEWAY

Rails

:bad_gateway

Go

http.StatusBadGateway

Symfony

Response::HTTP_BAD_GATEWAY

Python3.5+

http.HTTPStatus.BAD_GATEWAY

Java

java.net.HttpURLConnection.HTTP_BAD_GATEWAY

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_BAD_GATEWAY

Angular

@angular/common/http/HttpStatusCode.BadGateway