这个坑值得记一笔。Nginx 1.25 启用 HTTP/3 与 QUIC 后,Googlebot 尝试 h3 连接 intermittently 失败,日志里出现 quic handshake error,同一时间抓取成功数从每天两万降到六千。

真正麻烦的地方在于,几个原因的现象几乎一样。UDP 443 没有在安全组放行,h3 尝试超时后才回落到 tcp;QUIC 的证书链与 tcp 443 用的不是同一份文件;中间设备对 UDP 做了限速,握手包丢失率高。

动手时先确认 UDP 443 是否可达

curl --http3 -sI https://www.example.com/ | head -3

随后开放 UDP 端口并保持 tcp 回落

ufw allow 443/udp && listen 443 quic reuseport; listen 443 ssl;

末了对比 h3 与 h2 的失败率

grep -c "quic handshake error" /var/log/nginx/error.log

改之前先确认了最近有没有人动过配置,避免白查一遍。

这次没动代码,只在配置和运行环境上找原因。

隔了一天再看,现象没变,说明不是偶发。

别只看报错消失,验证要多做一步。h3 握手失败条数降到每天个位数,抓取成功数回到两万以上,响应头里 alt-svc 能正常返回。

这里还有个坑。h3 只是加速手段,安全组和中间链路没准备好之前,宁可先关掉,回落到 h2 也不会掉收录。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189