众所周知,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 进行测试,见文档地址。
作业
- 502 与 504 有何区别