521/522 状态码排障指南

当您使用腾讯云 EdgeOne 加速站点访问资源后,客户端的请求将发送至 EdgeOne 边缘节点,再回源到中间层节点,最终再回源到源站。因此如果访问过程中出现问题,可能涉及到多层网络链路的问题。当 EdgeOne 回源源站失败时则会出现 52x 的错误,本文档将为您介绍当出现 521/522 状态码时,您应该如何排查。
如下,以 522 状态码为例:

定义

522 状态码是 EdgeOne 自定义的状态码,指节点请求到源站,在 TCP 建连阶段,源站一直没有响应导致节点超时,则节点响应客户端 522 状态码。其它状态码的含义请参考 异常状态码参考


现象



可能的原因

源站自身服务问题
源站安全策略导致
运营商限制(HTTP)

排查方法

从第三方(非 CDN、源站)发起 HTTP/HTTPS 请求,指向源站测试,第三方可以是个人 pc、服务器、监测平台等。可以通过在服务器上使用命令行工具 CURL 来排查。

步骤一:确定回源配置信息

若您无特殊配置,则仅以「域名管理」处设置的源站、协议、以及端口为准即可。若有特殊配置,则可参照如下方法进行确定:
1. 源站 IP:源站 IP 需要根据「域名管理」配置的源站、源站组、负载均衡以及规则引擎「修改源站」的配置综合确定。
2. 回源协议:回源协议需要根据「域名管理」、规则引擎「回源 HTTPS」以及「修改源站」里的回源协议综合确定。
3. 回源端口:若无特殊配置,则为 80443,若您在规则引擎「修改源站」操作中有修改回源端口,则以修改后的为准。
4. 回源 HOST: 默认跟随加速域名,若您在规则引擎「Host Header 重写」操作中有进行设置,则以设置的为准。
5. 回源 Path:默认跟随请求 URL,若您在规则引擎「回源 URL 重写」操作中有进行修改,则以修改的为准。

步骤二:源站自身服务问题排查

可能是源站服务异常,比如端口侦听未开启,可使用命令行工具 telnet,从第三方平台指向源站端口发起 telnet 请求,测试方法如下:
telnet [源ip] [端口]
注:CURL 版本保证在 7.21.3 版本以上。
假设回源使用 80 端口、源 ip 为 1.1.1.1
telnet 1.1.1.1 80
从第三方平台 telnet 源站的 80 端口,如果 TCP 连接被断开或一直在连接中,可在源站上执行如下命令确认源站 80 端口是否开启,测试示例如下:
netstat -tnlp|grep -w 80
若 TCP 连接建立成功或自查源站端口有正常开启,则进入步骤三。

步骤三:源站安全策略排查

可能的原因如下:
1. 源站有设置防火墙,EdgeOne 回源节点 IP 不在 IP 白名单里。
CURL 获取 EO-LOG-UUID,提交给腾讯云技术支持,由技术支持查询 EdgeOne 回源节点的 IP,源站自查回源节点 IP 是否在源站的 IP 白名单里。其中,UUID 获取方法如下:

2. 源站设置访问限频,EdgeOne 回源频率过高。
可指向源站并发发起多个请求,验证能否复现与源站建连失败或超时的现象。

步骤四:运营商限制

若以上排查均是正常的,则有可能是被运营商限制,需要在源站上抓包确认是否有收到 TCP SYN 包,排查方法如下:
在 EdgeOne 回源节点和源站上同时抓包,并在 EdgeOne 回源节点上发起 telnet 请求至源站(由腾讯云技术支持操作)。测试命令如下:
EdgeOne 回源节点:
telnet [源ip] [端口]

# 抓包
tcpdump -nn -s0 -i [网卡] -w src_port.pacp
源站:
tcpdump -nn -s0 -i [网卡] -w src_port.pacp
通过对比 EdgeOne 回源节点与源站的数据包,确认 EdgeOne 回源节点的 SYN 包源站是否有收到。