“源站直接访问正常,接入CDN以后为什么反而出现502?”
这是CDN使用过程中比较常见的一类问题。
用户访问CDN时,如果边缘节点已经缓存了所需内容,可以直接返回结果;如果节点没有缓存、缓存已经过期,或者请求属于动态内容,CDN就需要向源站重新获取数据。
这个过程就是回源。
因此,CDN回源异常并不等于CDN节点一定出现故障。源站没有正确响应,用户同样会看到502、504或者访问超时。
一、先判断是不是回源问题
排查前,先观察问题是否只发生在需要回源的请求上。
可以从几个现象进行判断:
已经缓存的图片可以打开,新上传的图片打不开。
首页正常,动态接口返回502。
刷新缓存后,原本正常的文件开始报错。
源站地址可以访问,CDN域名无法访问。
第一次访问很慢,后续访问恢复正常。
部分地区正常,部分地区持续异常。
如果缓存内容可以正常返回,而新内容或动态内容访问失败,问题通常集中在CDN节点到源站的链路。
腾讯云国际CDN的工作方式也是在节点没有命中缓存时,根据源站地址和回源HOST向源站获取内容。腾讯云国际CDN新手指引
二、根据状态码判断方向
不同状态码,可以帮助缩小检查范围。
常见状态包括:
502:CDN从源站获得无效响应,或无法正常完成回源连接。
504:源站在规定时间内没有完成响应。
403:源站权限、防盗链、访问控制或对象存储鉴权失败。
404:源站找不到请求资源,或者回源HOST指向了错误站点。
423:可能存在回源循环或跳转异常。
499:客户端在服务返回前主动断开连接。
腾讯云官方状态码说明也建议,出现502时先检查业务源站,出现504时重点检查源站响应与超时问题。腾讯云CDN状态码说明
但是,状态码只能提供方向,不能单独证明问题来自哪一层。还需要结合源站日志和CDN监控继续判断。
三、先确认源站是否真的正常
“源站可以打开”不一定代表源站能够稳定承接CDN回源。
人工打开一个页面,只能说明当时的一次请求成功。CDN回源可能来自多个节点,并且在缓存集中失效时产生较多并发请求。
建议查看故障时间段的源站监控:
CPU和内存是否过高。
公网带宽是否接近上限。
Web连接数是否达到限制。
应用进程是否发生重启。
数据库连接是否出现等待。
磁盘读写是否明显变慢。
源站是否返回大量4XX或5XX状态码。
如果504主要出现在访问高峰,源站处理能力不足的可能性较高。
如果重启源站后短时间恢复,运行一段时间又出现问题,则要继续检查连接泄漏、进程状态和应用依赖,不应把重启当成最终处理方式。
四、检查源站地址和端口
CDN控制台中的源站地址,决定回源请求要发送到哪台服务器。
常见配置错误包括:
填写了已经停用的公网IP。
服务器更换IP后没有更新CDN配置。
源站域名解析到了错误地址。
回源端口与源站实际监听端口不一致。
主源站和备用源站填写错误。
区域独立配置指向了旧源站。
源站域名又解析回同一个CDN域名。
最后一种情况会形成回源循环。
例如,CDN访问源站域名,源站域名又通过CNAME指回CDN。请求在CDN与源站配置之间反复循环,就可能导致访问失败。
源站域名不应与加速域名形成相互指向的解析关系。
五、回源HOST配置错误
源站地址和回源HOST不是同一个概念。
源站地址决定CDN连接哪一个IP或域名;回源HOST则决定CDN连接到服务器后,请求服务器上的哪个网站。
如果一台服务器上部署了多个网站,服务器通常会根据请求中的HOST字段判断应该返回哪个站点。
当回源HOST填写错误时,可能出现:
返回默认站点页面。
返回404。
被源站拒绝访问。
HTTPS证书名称不匹配。
请求被转到其他业务。
源站日志中出现陌生域名。
例如,用户访问的是加速域名,但源站Web服务只接受另一个业务域名。如果回源HOST仍然使用加速域名,源站可能找不到对应站点。
腾讯云国际文档说明,源站地址决定回源连接的具体位置,回源HOST决定访问该地址上的具体站点。腾讯云国际CDN源站配置
六、检查HTTP和HTTPS回源协议
腾讯云国际CDN可以配置HTTP回源、HTTPS回源或协议跟随。
如果选择HTTPS回源,源站必须能够正常提供HTTPS服务。
常见问题包括:
源站只监听80端口,却配置了HTTPS回源。
HTTPS证书已经过期。
证书域名与回源HOST不匹配。
证书链不完整。
源站只支持特定TLS版本。
防火墙没有开放443端口。
自定义回源端口填写错误。
如果用户通过HTTPS访问CDN,并不代表CDN一定要通过HTTPS连接源站。用户到CDN、CDN到源站属于两段独立链路。
选择哪种回源协议,应当根据源站实际能力和安全要求确定。
七、防火墙可能拦截CDN回源节点
有些源站只允许固定IP访问,以减少扫描和攻击。
接入CDN后,源站看到的访问来源通常是CDN回源节点,而不是最终用户的公网IP。如果服务器防火墙、安全组或Web应用防火墙没有允许对应回源节点,请求就可能被拦截。
这种问题常见的表现是:
源站本地访问正常。
办公网络直接访问源站正常。
CDN回源持续超时。
只有某些区域的CDN节点回源失败。
源站日志中看不到失败请求。
可以在腾讯云国际CDN控制台查询相应加速区域的回源节点IP,并检查源站访问控制。
不要为了测试长期开放所有端口和所有来源。更稳妥的方式是确认业务端口,并根据官方回源节点范围设置允许规则。腾讯云国际CDN回源节点查询
八、查看源站日志是否收到请求
源站日志是判断问题位置的重要依据。
如果故障发生时,源站日志完全没有对应请求,应该优先检查:
源站地址
DNS解析
路由和公网连接
安全组
操作系统防火墙
回源节点IP白名单
如果源站已经收到请求,并返回403、404或5XX,则应重点检查:
回源HOST
应用路由
文件路径
防盗链
身份认证
服务器内部错误
如果日志显示请求进入源站,但处理时间很长,最终由CDN返回504,就要继续检查应用、数据库和外部接口。
九、COS源站需要检查访问权限
如果CDN源站使用腾讯云COS,还要确认存储桶是公有还是私有。
私有存储桶不能仅填写访问地址就完成回源,还需要正确配置CDN访问授权或回源鉴权。
常见问题包括:
COS存储桶为私有,但CDN没有获得访问权限。
存储桶或对象设置了独立权限。
回源使用了错误的存储桶地址。
静态网站地址与默认对象地址混用。
对象路径或大小写不一致。
防盗链规则拒绝了CDN请求。
如果源站是AWS S3、阿里云OSS等第三方对象存储,也要检查存储桶权限、访问密钥和回源鉴权配置。
十、缓存集中失效会放大回源压力
CDN缓存刷新后,大量节点可能在短时间内重新向源站请求内容。
如果同时刷新大量热门文件,源站可能瞬间承受较高的连接数和带宽压力,最终出现502或504。
类似情况还包括:
缓存时间设置过短。
响应头设置为不缓存。
URL携带大量随机参数。
动态请求全部回源。
热门资源频繁更新。
缓存键配置不合理。
大文件没有使用合适的分片回源。
如果回源带宽突然上升,同时缓存命中率下降,应当检查最近是否执行了缓存刷新,以及缓存规则是否发生变化。
腾讯云也将缓存刷新、新资源增加、缓存策略不当和源站异常列为命中率下降的常见原因。腾讯云CDN命中率排查
十一、多源站配置要逐个检查
配置多个源站后,CDN可能根据权重或规则把请求分配到不同服务器。
如果其中一台源站异常,就会出现用户有时成功、有时失败的情况。
需要逐个确认:
每台源站是否都能提供相同资源。
应用版本是否一致。
HTTPS证书是否一致。
文件是否已经同步完成。
每台服务器是否都允许CDN回源。
源站权重是否符合预期。
热备源站是否能够正常接管请求。
如果只有部分地区异常,还要检查是否配置了区域独立源站或高级回源规则。不同区域可能正在访问不同的源站地址。
十二、301和302跳转也可能造成异常
部分源站会把HTTP跳转到HTTPS,或者把一个域名跳转到另一个域名。
如果跳转后的地址仍然指回原来的CDN路径,可能形成循环。
还要注意:
跳转地址是否能够从公网访问。
跳转后的域名是否已经接入CDN。
CDN是否配置回源跟随跳转。
源站是否根据错误的HOST持续重定向。
HTTP与HTTPS是否来回跳转。
如果浏览器提示重定向次数过多,应该同时检查CDN回源协议、回源HOST和源站跳转规则。
推荐的排查顺序
遇到CDN回源异常,可以按照下面的顺序处理:
记录故障时间、地区、URL和状态码。
判断缓存内容是否正常、新内容是否异常。
检查源站CPU、带宽、连接数和应用状态。
核对源站地址、端口和DNS解析。
检查回源HOST是否匹配源站站点。
检查HTTP或HTTPS回源协议。
检查安全组、防火墙和回源节点白名单。
查看源站日志是否收到请求。
使用COS源站时检查存储桶权限。
查看缓存命中率和回源带宽。
多源站场景逐台检查健康状态。
检查跳转规则是否造成回源循环。
每次只修改一项配置,并在修改后分别测试缓存资源和未缓存资源。这样才能判断问题是否真正发生在回源链路。
结语
腾讯云国际CDN回源异常,可能发生在CDN节点到源站之间,也可能发生在源站内部。
可以把访问链路理解为:
用户 → CDN边缘节点 → 回源网络 → 源站防火墙 → Web服务 → 应用和数据库
先根据状态码和源站日志判断请求走到哪一步,再检查对应环节,通常比反复刷新缓存或者切换域名更容易找到根本原因。