网站页面出现502 Bad Gateway,白底页面没有任何内容,多次刷新结果不变。这类故障不是本地网络中断,也不是浏览器异常,问题出在网站服务端。网关或者代理服务器,从上游后端服务器拿到无效响应,无法处理这个结果,直接向访问者返回502错误码。
最常见部署架构是Nginx作为反向代理,后端运行PHP-FPM或是应用服务。用户请求先抵达Nginx,Nginx转发请求交给PHP-FPM处理。PHP-FPM崩溃、卡死,或是返回Nginx无法解析的数据,Nginx就抛出502。502故障根源基本在后端程序,Nginx本身很少出问题,Nginx只是中转请求,后端服务无法正常返回数据,就向外抛出502。

出现502,如果是网站管理员,不要直接重启服务器,优先查看日志。Nginx错误日志能够定位具体原因,默认路径一般是/var/log/nginx/error.log;宝塔面板环境下日志放在/www/wwwlogs/目录。日志会输出类似connect() failed (111: Connection refused) while connecting to upstream,或是upstream prematurely closed connection这类信息。Connection refused代表后端服务没有启动,或是监听端口配置错误。Prematurely closed代表后端程序运行中途异常终止,多为程序崩溃或是请求超时。
下一步检查后端服务运行状态。PHP-FPM执行systemctl status php-fpm查看状态,如果处于running,确认监听端口或是socket文件配置。Nginx配置内fastcgi_pass指向127.0.0.1:9000或是unix:/tmp/php-cgi.sock,两处配置必须保持一致。PHP-FPM升级之后socket路径改动,Nginx配置沿用旧地址,就会持续报502。执行netstat -lntp | grep 9000,或是查看socket文件,快速核验监听状态。
资源耗尽是高频诱因。内存不足时Linux系统OOM Killer会终止占用内存最高的进程,PHP-FPM经常成为被终止对象。free -m查看内存占用,dmesg | grep -i kill检索OOM相关记录。磁盘空间占满,后端无法写入session或是日志文件,程序同样崩溃,df -h查看磁盘占用,确认根分区或者/var分区是否100%占用。CPU满载不一定直接触发502,但后端处理请求持续等待CPU资源,超时之后Nginx断开连接,返回502。
超时参数不匹配也是常见坑。PHP设置max_execution_time为300秒,Nginx的fastcgi_read_timeout只设置60秒。一条慢查询执行耗时90秒,PHP还在运算,Nginx等待超时,直接返回502。Nginx超时值设置要略大于PHP,PHP300秒,Nginx配置330秒。反过来,PHP-FPM的request_terminate_timeout小于PHP的max_execution_time,PHP脚本没有执行完成就被FPM终止,同样触发502。
连接数限制需要检查。PHP-FPM的pm.max_children控制并发处理请求数量。网站流量突然上涨,或是爬虫大量访问,全部子进程占满,新请求排队无法处理,Nginx返回502。临时调高max_children能够缓解,根治需要优化代码或是扩容服务器。MySQL数据库max_connections耗尽,PHP无法连接数据库,脚本异常退出,最终现象也是502。
宝塔面板环境操作简单,面板直接查看PHP-FPM运行状态,一键重启服务。重启只能临时恢复服务,无法解决根本问题。重启之后短时间再次出现502,代表底层故障依旧存在。查看PHP慢日志、错误日志,定位消耗资源的插件或是代码片段。WordPress站点这类问题多发,插件大量执行数据库查询,或是内存上限过小,修改wp-config.php里define('WP_MEMORY_LIMIT', '256M')可以缓解。
CDN、负载均衡后端也会出现502。源站健康检查失败,CDN判定源站故障,直接返回502给访客。登录CDN控制台查看回源状态,确认源站IP、端口连通正常,防火墙放行CDN回源IP段。源站更换IP,CDN配置没有同步更新,也会出现这类报错。
普通访客遇到502能操作的选项不多,刷新页面,切换网络,清理浏览器缓存,部分情况只是节点临时异常,等待几分钟自动恢复。持续无法访问,可以借助站长工具、downforeveryoneorjustme检测,确认是否全网无法打开。如果是,只能等待网站维护人员修复,多次刷新只会加重后端服务器压力。
排查502的思路,先定位日志再处理。依据日志信息定位故障点,不要第一时间重启Nginx,Nginx极少是故障源头。后端服务、资源占用、超时配置、连接上限,依次排查,大部分502故障都能找到原因。定位问题之后按需调整配置、扩容内存、优化代码。重启只是应急手段,根源问题不解决,流量上涨之后故障会重复出现。