这个坑值得记一笔。站点用 Nginx 1.24 把扫描路径统一 return 444,之后 Search Console 抓取统计里出现大量连接重置,正常文章页也偶尔抓不到,日志里这些请求干脆没有状态码。试过换成 404,扫描量又回来了。
刚开始盯着「断连发生在 TLS 握手之后,客户端要重试三次才放弃」,折腾了半个多小时,排掉了。
这类报错背后常见的原因有几处,逐个排除就行。444 是直接断连,不返回任何响应,蜘蛛只能记为网络错误;location 匹配写得太宽,把正常路径也带进了这条规则;CDN 把断连当成源站故障,触发短时熔断影响其他请求。
第一件事是看 444 时 curl 拿到的返回
curl -sI https://www.example.com/ -o /dev/null -w "%{http_code}\n"
然后找出所有 444 规则的位置
grep -rn "return 444" /etc/nginx/conf.d/
再往下改成可识别的 403
return 403;
校验配置并平滑重载
nginx -t && nginx -s reload
怎么算真的好了,看的是同一批现象。日志里重新出现带状态码的记录,连接重置条目一周内消失,文章页抓取成功率回到九成九。
这里还有个坑。想彻底不暴露可以用 444,但只对确定不存在的路径用,正常目录必须返回蜘蛛能识别的状态码。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
