网页弹出Bad Gateway,一般附带502状态码,这个报错看着吓人,含义不难理解:你访问的入口服务器,收到后端服务器的无效响应,或是根本连不上后端服务。
整个访问链路是这样。浏览器先连接网站入口服务器,入口可能是Nginx、Apache,也可以是云服务商负载均衡。入口服务器不会直接处理业务,需要把请求转发给后端业务服务,比如PHP、Java、Python程序。如果后端服务无响应、超时,或是返回异常内容,入口服务器无法处理,只能返回502。
所以故障根源一般不在访客电脑,网站也不一定完全瘫痪。大多是网站后端某个进程卡死,入口服务正常运行,但后端业务程序异常。

造成502的原因种类很多。最常见是后端程序崩溃,比如PHP-FPM进程停止,Nginx正常运行,请求转发过去没有程序接收,直接返回502。还有后端处理耗时过长,入口服务器等待超时,主动断开连接,触发502。数据库连接失败也会出现该现象,程序本身没有崩溃,但卡在数据库连接步骤,入口等待超时。
服务器资源耗尽也是高频诱因。内存占满之后,系统会强制杀掉进程,后端服务被终止且没有自动重启,入口服务还在运行,后端服务中断。CPU满载拉长业务处理时间,同样触发超时。
还有一类故障和配置相关。Nginx的proxy_pass指向不存在端口,或是upstream后端地址修改之后没有同步更新,请求转发找不到目标,返回502。这类故障大多在修改配置之后立刻出现,比较容易定位。
云服务商负载均衡偶尔也会出现这类问题。负载均衡健康检查判定后端实例异常,不再分发流量,用户访问就看到502。这种情况很多几分钟自动恢复,也可以手动重新挂载后端实例。
普通访客遇到502可以做这些操作。刷新页面,Ctrl+F5强制刷新或者更换浏览器,部分情况只是短暂进程重启,等待几秒就能恢复。刷新无效就切换网络,打开手机热点测试,排除本地网络问题。还可以使用站长之家、ITDOG这类在线工具,多地区检测网站,如果多地检测都返回502,确定是服务器端故障,不是本地问题。
如果你是网站管理员,排查顺序优先确认后端服务状态,执行systemctl status php-fpm或者ps aux | grep 进程名,确认进程是否正常运行。之后查看日志,Nginx的error_log会记录报错详情,标注是连接拒绝还是超时。PHP慢日志可以定位耗时卡住的请求。资源层面用top或者htop查看内存、CPU占用,资源打满的话先重启服务恢复访问,再排查资源占用过高的根本原因。
配置检查方面,核对Nginx upstream地址端口,proxy_read_timeout参数如果设置过小,后端业务处理耗时较长时,需要调大。数据库连接池占满也会造成后端响应缓慢,要根据业务负载调整连接数上限。
很多人分不清502和504。504是网关超时,代表入口服务器等待后端时间过长,主动终止请求。502是网关错误,代表入口和后端建立连接失败,或是收到无效应答。两者都指向后端异常,504偏向处理速度慢,502偏向服务崩溃或是配置错误。
还有比较少见的SSL证书问题。入口服务器和后端之间使用HTTPS通信,证书过期或者不匹配,握手失败,也会返回502。这类场景一般在error_log日志内留下SSL相关报错。
总的来说,502是中间网关层抛出的错误,说明问题发生在服务器内部链路,但具体故障节点,要查看日志才能定位。普通访客能做的操作有限,刷新页面、更换网络、等待恢复基本就是全部办法,剩下的排查修复都要网站服务器管理员处理。