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 出现在边缘不代表源站挂了,连接复用和超时设置不匹配时,源站日志里可能一条失败都看不到。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189