天天看点

CDN-502 问题排查

浅谈:

502 问题就是客户端请求服务端超时而返回的一个网络 http 错误码,那么 502 一般是什么状态产生的呢?

如果三次握手失败一般都是返回的 504 ,网关超时。

三次握手成功,但是首包超时,或者客户端 read payload 超时,一般是 502 。

如果服务端应用处于不可用状态,一般是直接返回 500 。

分析:

  • 可以通过 ipip.net 解析其他地区覆盖的 CDN 节点,测试看看是否所有地区都是 502 。如果其他地区测试也都是 502 ,说明访问 CDN 出现了问题。还是只有个别 CDN 节点失败,如果个别 CDN 节点失败说明,和客户端的网络是有关联的。
  • 固定原站直接测试看下返回的状态是否是 200 ,如果原站都是 502 的话说明原站就有问题了。
  • 固定 CDN 节点访问 502 时,看看 CDN 节点的响应头,via 头中是否全部都是 M 的标志,如果都是 M 标志说明时 MISS 回源的过程中返回的 502 ,那可能和回源链路,或者原站有安全策略等关联。
  • 如果原站时国外或者国内,访问 CDN 需要跨过回源时,会经常出现 502 的情况,一般和国际链路出口阻断有关系,需要判断是否存在跨过回源的可能性。

案例:

客户搭建 nginx ,然后通过 proxy_pass 的方式替换域名请求头回到 CDN 出现了 502。

CDN-502 问题排查

排查:

按照排查思路逐步测试。

1、我们自己客户端 curl 直接固定 CDN 节点发现测试时正常的 200 ,没有 502 的情况出现,说明 CDN 正常服务。

2、而用户端 proxy 的机器上就能复现,需要用户提供下 proxy 机器上 ping 到的 CDN IP 后,再固定 CDN IP 发现确实 502 了。但是用户表示固定我们提供的其他节点都是正常的返回 200 ,说明可能和节点有关。

3、根据用户提供的节点我们发现这个 IP 已经不再服务用户,而且 DNS 解析也并没有解析到对应的 IP 上,但是用户怎么访问到的呢?

经过沟通发现时用户绑定的 /etc/hosts 的方式进行 proxy 的,而之前的节点已经更新,用户没有及时更新导致。