网站突然打不开,页面白底黑字写着 502 Bad Gateway,下面一行 nginx,刷新几次偶尔能进去。老板在群里问是不是服务器崩了,其实机器好好的,是后面接的那个服务没接住请求。
502 的含义是网关从上游收到了无效响应。nginx 在这类架构里通常当门卫,把请求转给 php-fpm、Tomcat 或另一台后端。门卫站着,后面的人不应答,门卫只能回一句 502,所以先别急着重启 nginx,先看后端还在不在。
后端进程没起来,重载 nginx 没用
登上去先查进程和端口:ps aux | grep php-fpm,ss -lntp 看 9000 或 8080 有没有在听。php-fpm 挂了、Java 服务内存溢出被杀、Docker 容器反复重启,都会表现成 502。systemctl status php-fpm 能看到最近一次退出原因,容器用 docker ps -a 看退出码。
error.log 里搜 upstream
nginx 的错误日志一般在 /var/log/nginx/error.log,tail -f 跟上,再刷一次页面。常见两类:connect() failed 表示连不上后端,upstream prematurely closed 表示后端接了请求又提前断开。前者查进程和防火墙,后者多半是脚本超时、内存不够,或者后端自己崩了。
超时改大只能救慢接口
后端处理时间长,nginx 等不及也会报 502 或 504。fastcgi_read_timeout、proxy_read_timeout 默认 60 秒,长导出、大文件上传可以适当调大。但接口本来就慢,调超时只是把错误推迟,数据库慢查询、循环查库这些根子还在,早晚还得回来。
浏览器这边也会背锅
公司网络有代理、本机装了抓包工具、CDN 回源配置错了,都可能只让部分人看到 502。用手机流量开一次,或者 curl -I 直接打源站 IP,能快速分清是站的问题还是链路的问题。修好后记得让用户强刷,旧页面缓存有时还挂着错误页;这类问题的排查记录留一份,下次恢复能快不少。