问题出现得很突然,日志倒是留得挺全。网站打开要等好几秒才出内容,抓包发现浏览器先尝试了 IPv6 地址,超时之后才回退到 IPv4,而服务器侧的日志里只有后一次请求。
把日志和配置对完,能解释这个现象的基本就这几处。域名同时有双栈记录,客户端优先尝试 IPv6。少数情况下是服务器 IPv6 路由不通,连接超时后才回退。
另外,本机没有可用 IPv6 出口。
上来先确认域名解析结果
dig +short AAAA 域名
测试 IPv6 连通性
curl -6 -I --max-time 5 https://域名
本机临时禁用 IPv6 优先
sysctl -w net.ipv6.conf.all.disable_ipv6=1
剩下的就是确认访问耗时变化
curl -o /dev/null -s -w '%{time_total}\n' https://域名
当时还开着另一个排查窗口,两边日志对照着看才定位到。
改完先别撤,确认这几项。访问耗时从数秒降到一秒以内,不再出现先超时再回退的情况。
补一句。直接关掉 IPv6 只是回避,正确的做法是让双栈都真正可用;否则移动网络用户会持续受影响,问题只是暂时看不见。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。