监控一片 405,站点其实没挂

有次给一个接口加监控,配完立刻告警,状态码全是 405。登上去手动打开首页,一切正常。查了半天才反应过来:这个路径只接受 POST,监控发的是 GET。

405 不是在说「没有这个地址」,而是在说「这个地址不接受你这种请求方式」。两件事差得很远。

404、403、405 各说各的

404:这个路径不存在。路由没匹配上,或者文件真的没了。

403:路径存在,但你没权限。可能是目录权限、WAF 拦截、来源限制。

405:路径存在,方法不对。接口只允许 POST,你用了 GET;或者只允许 GET,你用了 DELETE。

这三种经常被混为一谈,但排查方向完全不同。看到 405 就去找文件,基本是白费。

宝塔拨测控制台:定时拨测任务、节点与告警配置

宝塔拨测控制台:定时拨测任务、节点与告警配置

谁会返回 405

应用路由是最常见的一层。框架明确声明了某个接口只收 POST,其他方法进来直接拒绝。

Nginx 的 limit_except、API 网关的方法白名单、CDN 的方法过滤、WAF 的规则,也都能返回 405。有些防护产品会直接拦掉 PUT、DELETE 这类不常见的方法。

所以看到 405,先别认定是代码问题。

响应头里的 Allow 是答案

405 响应一般会带一个 Allow 头,列出这个资源支持的方法。里面写了 POST 没写 GET,就说明请求方式不对;里面是空的,或者压根没有这个头,多半是网关或 WAF 自己生成的。

这个细节比状态码本身有用,能直接区分「应用拒绝」和「中间层拦截」。

用拨测把范围切开

在宝塔拨测的控制台配 HTTP 监控时,先确认探测的路径和方法跟真实用户一致。首页用 GET,提交接口用 POST,别拿一个 GET 去测只收 POST 的地址。

同一路径换成浏览器访问、用 curl 指定方法再试一次。命令行能过、监控不过,问题在探测配置;两边都 405,才往应用和网关查。

多地区多运营商节点一起看。所有节点都 405,是统一策略;只有部分节点 405,更像是某个 CDN 边缘或区域网关的规则不一致。

复测和该警惕的情况

改完方法或规则,用同一批节点复测两三次,确认 405 消失、状态码回到预期,而不是只在自己电脑上试通。

该警惕的是:静态页面 GET 也返回 405,说明方法限制配到了不该配的地方;405 和 403 交替出现,可能是 WAF 规则在动态调整;Allow 头里出现了你没开放过的方法,那就要查是谁改的配置。

405 本身不可怕,怕的是把它当成 404 去查,越查越远。