502/504 状态码有什么区别

1,914 阅读2分钟

众所周知,50x 都是服务器异常问题。

  • 500: Internal Server Error
  • 502: Bad Gateway
  • 503: Service Unavailable
  • 504: Gateway Timeout

502 与 504 的区别

这两种异常状态码都与网关 Gateway 有关,首先明确两个概念

  • Proxy (Gateway),反向代理层或者网关层。在公司级应用中一般使用 Nginx 扮演这个角色
  • Application (Upstream server),应用层服务,作为 Proxy 层的上游服务。在公司中一般为各种语言编写的服务器应用,如 Go/Java/Python/PHP/Node 等

此时关于 502 与 504 的区别就很显而易见

  • 502 Bad Gateway。一般表现为你自己写的应用层服务(Java/Go/PHP)挂了,或者网关指定的上游服务直接指错了地址,网关层无法接收到响应
  • 504 Gateway Timeout。一般表现为应用层服务 (Upstream) 超时,超过了 Gatway 配置的 Timeout,如查库操作耗时三分钟,超过了 Nginx 配置的超时时间

实践

因为 50x 只有在服务器遭受异常时才会出现,因此无法在各大网站找到实例。

为了加深理解,在这里使用 docker/nginx 模拟 502/504,见 learn nginx by docker

location /api {
    proxy_pass http://api:3000;
}

location /502 {
    # 可通过查看响应头来判断是否成功返回
    add_header X-Config A;
    # 指定一个不存在的服务,即可返回 502
    proxy_pass http://localhost:9999;
}

location /504 {
    proxy_read_timeout 10s;
    proxy_send_timeout 10s;
    # 该请求需要 3000s 才会响应数据
    proxy_pass http://api:3000/?wait=3000000;
}

通过 docker 成功部署后,可使用 Apifox 进行测试,见文档地址

作业

  1. 502 与 504 有何区别