key 文件确实放在根目录,浏览器打开能看到内容,IndexNow 校验一直失败,抓包发现响应头是 text/html,CDN 把它当成了不存在的页面。

把日志和配置对完,能解释这个现象的基本就这几处。CDN 对 txt 后缀配置了回源到首页的兜底规则;源站的 key 文件被安全策略拦截,回源拿到的是错误页;响应头没有显式指定 text/plain。

动手时先检查 key 文件的响应头

curl -sI https://www.example.com/8f3a2c9d1e.txt

随后在 CDN 里给该路径配置直通

curl -s -X POST https://cdn.example.com/api/rule -d '{"path":"/8f3a2c9d1e.txt","cache":"bypass"}'

源站显式指定 MIME

location ~* ^/[0-9a-f]{10}\.txt$ { default_type text/plain; }

复检响应头与内容

curl -sI https://www.example.com/8f3a2c9d1e.txt | grep -i content-type

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

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

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

那几天正好在做别的变更,先把时间线对齐才敢动手。

恢复的判定其实很直接。响应头变成 text/plain 后校验通过,IndexNow 提交开始返回 202。

key 文件不只是要能打开,还要有正确的 Content-Type,CDN 的兜底页最容易在这里冒充成功。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189