CDN 边缘日志里回源超时每天上千条,源站本地监控却显示一切正常,GSC 同时报主机负载错误,两边的时间点几乎完全重合。
一开始怀疑是「CDN 的回源超时设成 5 秒,而慢页面本身就要 8 秒」,查了一圈,方向不对。
原因不止一个,得分开看。源站的 keepalive 时间比 CDN 短,复用连接时被对端关闭。另一种情况是回源走的是内网地址,某台机器网卡队列被打满。
另外,源站对回源 IP 做了限速,突发流量被丢包。
先对比两边同一分钟的失败数
grep ' 504 ' /var/log/nginx/access.log | awk '{print substr($4,2,16)}' | uniq -c | sort -rn | head
接着确认回源连接是否被提前关闭
ss -s; netstat -s | grep -i -E 'retransmit|reset'
然后把 keepalive 调到长于对端
keepalive_timeout 75s;
keepalive_requests 1000;
等前面都确认过,再对慢路径单独放宽超时
proxy_read_timeout 20s;
proxy_connect_timeout 5s;
别只看报错消失,验证要多做一步。回源 504 从每天上千条降到几十条,GSC 的主机负载错误同步消失,边缘节点 TTFB 回落到 200ms 级别。
这里还有个坑。504 出现在边缘不代表源站挂了,连接复用和超时设置不匹配时,源站日志里可能一条失败都看不到。这类问题最好一次改到位,反复小改反而容易把原因搅混。
