这类问题我又碰上了一次。巡检脚本用 curl 的默认 UA 逐条请求,报告连续一个月全绿,用户反馈移动版内页打不开,实测 m.example.com 下两百多条地址返回 404。

第一反应是「移动模板改版后旧路径没有跳转,404 页面被自定义错误页兜住」,验证下来不成立。

把日志和配置对完,能解释这个现象的基本就这几处。请求头只写了桌面 UA,移动版走的是另一条独立路由;移动子域没有纳入 URL 清单,巡检只覆盖了主域;结果按 URL 去重,桌面版正常就覆盖了移动版的失败记录。

带移动 UA 复验同一批地址

curl -s -o /dev/null -w '%{http_code}\n' -A 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0)' https://m.example.com/post/1

接着把移动子域加进巡检清单

grep -c 'm.example.com' urls.txt

再往下对比两个版本的状态码差异

for u in $(head -50 urls.txt); do d=$(curl -s -o /dev/null -w '%{http_code}' $u); m=$(curl -s -o /dev/null -w '%{http_code}' -A 'iPhone' $u); [ "$d" != "$m" ] && echo $u $d $m; done

给移动模板的旧路径补上跳转

rewrite ^/m/post/(.*)$ https://m.example.com/article/$1 permanent;

恢复的判定其实很直接。移动子域纳入巡检后第一轮就扫出 260 条 404,修复后两边的状态码差异清零。

容易忽略的是,移动版往往是独立模板甚至独立子域,只测桌面 UA 的巡检等于漏掉半个站点。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189