早上打开公司网站,浏览器白屏,中间一行 503 Service Unavailable。刷新两次偶尔能进,过一会儿又挂,客服电话很快就被打爆。
http error 503 是服务暂时不可用
这个状态码的意思是服务器还在,但后端暂时没法处理请求。常见原因有三种:程序池停止、后端服务挂了、请求量超过处理能力。
IIS 上更常见的是应用程序池停止,浏览器会显示 HTTP Error 503. The service is unavailable。到 IIS 管理器里看应用程序池状态,重新启动通常就能恢复。
访问别人的网站遇到 http error 503,基本只能等,或者过几分钟再刷新。频繁出现说明对方在维护或扛不住流量,一般不是你的网络问题。
顺手区分几个相近的码:502 是网关收到无效响应,504 是网关等后端超时,503 则是服务明确告诉你现在不可用。报错不同,排查方向也不同。
自己的站点先查这三处
- Nginx 的 error.log,看 upstream 是否连接失败
- PHP-FPM 或 Java 进程是否还在运行
- 服务器内存和 CPU 是否被打满
命令行走一遍更快:curl -I 看返回头,systemctl status php-fpm 看进程,docker ps 看容器有没有反复重启。日志里搜 error 和 killed。
反代报 upstream timed out,多半是后端响应太慢;提示 connect failed,则是后端没起来。先重启对应服务,再看日志有没有反复出现同样的错误。
如果是流量问题,临时加缓存、限流比直接加机器快。数据库连接池满了也会表现成 503,别只盯着 Web 服务。
被攻击也会造成 503,但这种情况要看访问日志里的异常来源,交给防护设备处理,别自己在服务器上硬扛。
恢复后补一步
服务起来先别急着关单,观察十分钟,看错误日志和监控曲线是否平稳。顺手把这次的时间点和操作记下来,下次同类问题能少走弯路。
维护期间可以主动返回 503 并带上 Retry-After,搜索引擎一般不会把它当成永久失效,比直接关站友好。
处理顺序就一条:先看日志定位是应用挂了还是扛不住,再决定重启、扩容还是限流。