404 not found 的意思是服务器收到了请求,但找不到对应资源。访问量突增时大量出现 404,既可能是资源压力导致后端或缓存层暂时失效,也可能是配置错误被高并发放大。区分两者的关键不是看 404 的数量,而是看它出现的时间分布、URL 分布和恢复方式:压力型通常集中在同一时段、URL 分散且随负载回落而消失;配置型往往集中在特定路径或规则,负载下降后依旧存在。
压力型 404 的典型特征是时间相关。假设某活动页面在十分钟内涌入平时数倍的请求,应用服务器连接池耗尽,动态路由无法完成解析,就会把本应返回 200 的请求变成 404 或 5xx 混合结果。这类 404 会随着流量回落自动减少,且涉及的 URL 比较分散,不集中在某几个目录。
配置型 404 的特征是路径相关。比如重写规则、反向代理的 location 匹配、CDN 回源路径或应用路由前缀被改动,某一类 URL 会稳定返回 404,与流量高低无关。此时即使流量回落到日常水平,这些 URL 仍然打不开。判断方法很简单:取一个当前报 404 的 URL,在低流量时段直接请求一次。如果低峰期仍 404,配置错误的可能性更大;如果低峰期恢复正常,则更偏向资源压力。
单看状态码不足以定性,需要交叉验证。以下三组证据能帮助作出判断:
需要注意,抓取量或某项统计归零不能单独证明处理正确。它也可能是爬虫主动降速、监控采样丢失或日志管道中断造成的,必须结合上面几组证据一起看。
最直接的动作是在低峰期复测同一批 404 URL,并同时保留一份高峰期的请求日志。具体做法:从高峰期 404 日志中抽取若干条 URL,在流量平稳时逐条请求,记录状态码和响应时间。
结果会直接决定下一步方向。如果低峰期这些 URL 返回 200,说明资源层是主因,下一步应检查连接池、缓存击穿、限流阈值和上游超时设置,而不是去改路由规则。如果低峰期仍然 404,说明配置层有问题,下一步应核对重写规则、代理转发路径和应用路由注册,确认请求在哪一环被丢弃。这个动作的价值在于:它用同一批 URL 作为对照,把"流量"这个变量排除掉,避免在错误的层面反复调整。
还有一种情况会让两种解释同时成立:配置本身正确,但依赖的外部资源在压力下不可用。例如应用需要从缓存或对象存储读取路由映射,压力期间该依赖超时,应用回退到默认路由并返回 404。此时低峰期复测会恢复正常,看起来像纯资源问题,但根因是配置缺少降级路径。区分方法是查看应用日志中是否存在依赖超时记录,以及 404 是否伴随超时或连接拒绝。
另外要区分状态码来源。反向代理、CDN 和应用各自都可能返回 404,它们的含义不同。代理层返回 404 通常意味着路径未匹配到后端;应用层返回 404 通常意味着业务逻辑判定资源不存在。查看响应头中的服务器标识和日志来源,能确认是哪一层给出的结果,从而缩小排查范围。若涉及 robots.txt 或站点地图,也要记住:robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录,它们与 404 的成因判断是两回事。
把时间、路径、恢复三组证据和低峰期复测结合起来,就能在访问量突增时判断 404 到底来自资源压力还是配置错误,并据此选择正确的修复方向。