页面弹出Service Unavailable,还有拼写错误版本serviceunvaluable,多数人第一反应就是刷新页面,反复刷新无效之后,会怀疑自身网络出问题。但这个报错和本地网络关联不大,是服务器反馈,代表暂时没办法处理用户请求。
Service Unavailable是HTTP协议503状态码,标准释义为服务器临时无法处理请求,常见诱因是服务器过载或者正在维护。和404有区别,404代表访问页面不存在,503代表页面资源存在,服务器当前负载不足无法响应。对比500,500是服务器处理请求时发生内部程序错误;503是请求还没有进入业务处理环节就被拦截。

serviceunvaluable并不是标准HTTP状态提示文本,基本是Service Unavailable的拼写失误。可能网站开发人员在自定义错误页面时输错文字,或是老旧中间件、遗留系统长期留存这个拼写bug。如果看到这段文字,说明报错页面是网站自定义的错误页面,不是浏览器或者CDN直接返回的原始提示。这种情况侧面证明服务器本身还在运行,只是后端某个环节出现阻塞。
产生报错的常见原因分为几类。服务器资源耗尽,CPU满载、内存不足、并发连接数达到上限,新请求无法接入;后端服务进程异常,PHP-FPM进程池占满、Java应用线程阻塞、数据库连接池耗尽;站点维护、服务重启,运维主动暂停业务;CDN或者反向代理层面限制,Nginx配置限流规则触发,直接返回503;云服务商基础设施故障,负载均衡后端健康校验失败,摘除故障节点。
普通访问用户碰到这个页面,可操作的手段不多。刷新一次页面,依旧报错,等待五分钟重试。网站存在多个访问入口,可以切换手机流量访问,排除本地缓存影响。清理浏览器缓存与Cookie,偶尔可以解决会话异常带来的假性503。这些操作全部无效,基本确定故障位于服务端,只能等待恢复或是联系网站管理员。
如果你是站长或者运维人员,遇到503不能单纯等待。第一步查看服务器监控面板,观察CPU、内存、磁盘I/O、网络连接指标,定位最先触顶的资源。第二步查看Web服务日志,Nginx的error.log和access.log会记录503触发根源,记录信息包含上游请求超时或是请求限流。第三步核查后端服务运行状态,PHP-FPM进程数量、Java应用GC日志、数据库连接数量。第四步核对CDN与负载均衡健康检查策略,健康检查间隔设置太短,阈值过于严苛,后端小幅波动就会被判定失效下线。
有一处高频踩坑点是连接池配置偏小。数据库连接池默认数值可能只有10,并发访问量上升,连接资源耗尽,新请求全部阻塞,前端页面返回503。调大连接池参数只是一方面,更重要排查慢查询语句长期占用连接不释放。另外Nginx的worker_connections默认数值512,高并发场景无法承载,需要上调至数千。
限流策略同样会触发503。Nginx limit_req、limit_conn模块触发限流,默认返回503,规范配置应该返回429,但很多配置文件没有修改。503告警集中在特定IP或者特定时段,优先查阅限流日志。
云服务商侧,AWS ELB、阿里云SLB,后端健康检查失败返回503。核查后端服务器安全组、防火墙,放行健康检查源IP。健康检查访问路径返回非200状态码,负载均衡判定后端服务异常,摘除节点。健康检测地址建议单独配置,不要和业务接口共用。
维护产生的503,可以提前在CDN或者负载均衡配置静态维护页面,返回503同时添加Retry-After响应头,告知搜索引擎和用户等待时长。谷歌爬虫识别Retry-After会按时间延后抓取,不会持续重复请求加重服务器压力。缺少这个响应头,爬虫会高频发起访问,加剧服务器负载。
503不属于永久故障,和404、410性质完全不同。搜索引擎针对503只是临时降低权重,不会直接删除索引;但故障持续超过较长时间,排名依旧会受负面影响。如果503状态超过24小时没有恢复,站长可以在Search Console提交说明,告知故障情况。
再回到serviceunvaluable这个错误拼写。如果在自己网站看到这段文字,在代码文件检索该字符串,大概率存在于错误页面模板。修改文字即可,不会影响站点功能,只是观感不够专业。在其他网站遇到这个提示,无需过多关注,属于对方开发人员的疏漏,和你的设备网络无关。