状态码这一串三位数,平时没人盯着看,等网站出问题的时候,它基本是唯一能开口说话的证物。网站返回状态码里有那么几个,一冒出来就说明事情不小,剩下的多半只是提醒你「这儿有点小毛病」。分清哪几个要命,能省下大把瞎折腾的时间——很多时候你在那改代码改到半夜,问题根本不在代码上。

网站返回状态码其实就分三档
1xx 那种基本见不到,2xx 是正常的,3xx 是让你换个地方去,4xx 是访问方那边的问题,5xx 是服务器自己出事了。这个分法很粗,但判断方向够用。容易让人加班的集中在两堆:一堆是 5xx,另一堆是被当成小事放过去的 4xx。看到哪个数字,先别急着重启服务,先确认这东西是谁发出来的——这句后面还会再提一次。
500 一出现,先别急着动代码
500 是服务器内部错误,字面意思就是「我知道错了,但我不告诉你在哪」。很多人的第一反应是回滚代码,这没错,只是顺序可以调一调:先看错误日志里有没有当场的堆栈,再看是不是刚改过配置、刚装过扩展。程序自己报错、数据库连不上、磁盘写满、目录权限不对,最后吐给用户的都可能是 500。日志放哪儿得看你用的面板和运行环境,各家路径不一样,以服务商或官方文档说明为准。
还有一种挺烦人的:本地跑得好好的,传上去就 500。多半是环境差异——扩展没装、大小写敏感、某个目录没给写权限。别急着怀疑人生,一条条对就行。
502 和 504,运维的背锅重灾区
502 是网关从上游拿到一个不正常的回应,504 是等上游等到超时。这俩经常一起出现,也经常被用户笼统地叫做「网站打不开」。它们的共同点是:真正出问题的往往不是网关本身,而是它后面跑应用的那台机器,或者数据库。
排查的时候别只盯着 nginx 或者面板的日志,要往后端找。进程是不是挂了、机器负载是不是飙上去了、连接数是不是满了、数据库有没有慢查询堆积。504 尤其容易跟「慢」搅在一起——可能只是某个接口卡住,网关等不住就断了。把超时时间调大,只是把痛往后推,根因还在那儿。
403 和 401,权限和防火墙的锅不好分
401 是「你没告诉我你是谁」,403 是「我知道你是谁,但你不能进」。听着挺清楚,现场常常糊成一团。最常见的是伪静态规则写错、目录权限不对,或者安全组、防火墙把某个路径拦了。还有一种:CDN 回源的时候带错了请求头,源站直接拒绝,用户那边看到的就是 403,你查半天源站日志还挺干净。
这儿有个笨办法特别好用——从服务器本机用 curl 访问一下,别从浏览器打。本机能通、外面不通,基本就是中间那层拦的;本机也不通,再去翻文件和权限。
404 看着人畜无害,成片出现就得查
单个 404 无所谓,页面上少张图、老外链失效,太正常了。但要是一段时间里 404 数量突然往上走,就得留神:可能是改版换了 URL 没做跳转,可能是模板里某个文件路径写错,也可能是有人在扫路径。前两种影响体验,最后一种就得去日志里看来源 IP 了。
补一句,别把所有错误都跳首页。有人图省事,404 统一 302 到首页,用户和搜索引擎都容易被绕晕,问题也被藏起来了。
429 和 499,日志里最容易被忽略的两个
429 是请求太频繁被限流,接口和爬虫访问里常见,自己写的采集脚本被封多半就是这个。499 是客户端主动断开,它不在标准里,是 nginx 自己记的,意思是服务器还没回话、用户那边先把页面关了——往往是加载太慢把人逼走的。499 多起来,别怪用户没耐心,先看后端是不是真慢。
这两个数字平时没人提,但它们出现的频率变化,比很多花哨的监控图表都诚实。
定位之前,先确认是谁返回的
这是最省时间的一步。用浏览器开发者工具看响应头,或者敲一句 curl -I,重点看 Server 那行和有没有 CDN 的特征头。如果返回方是中间的 CDN 或者负载均衡,那你跑去源站翻日志是翻不到的。反过来,源站日志里什么都没有,也不代表没人来过——请求可能压根没到。
网站返回状态码只是线索,不是结论。还有个小细节:状态码是可以被改写的,有些程序或者网关会把 500 包装成 200 正常返回,看着挺干净,实际把排障的路给堵死了。
真要说优先级:5xx 大于成片的 4xx,成片的 4xx 大于单个 4xx。碰上 5xx,先看日志、再看资源、最后才怀疑代码;碰上 4xx,先分清是权限、路径还是限流。把这几个数字记住,下次网站出问题,至少知道该往哪个方向找,不至于一上来就重装环境。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!