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 的兜底页最容易在这里冒充成功。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
