当前位置:首页 >  IDC >  服务器 >  正文

Nginx 502 Bad Gateway:从 PHP-FPM 到上游的四段排查

 2026-09-04 11:12  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

502 的全称是 Bad Gateway,翻译过来叫坏网关。这个翻译其实挺误导人的,因为它让人以为网关坏了。真实情况是:Nginx 好端端地在那儿,问题永远出在它背后的上游服务,绝大多数时候就是 PHP-FPM。搞清这一点,排查方向就不会跑偏。

第一段,确认 FPM 还活着。systemctl status php-fpm 一眼就能看出来,如果进程不在,先看它为什么起不来——刚改完配置就起不来,八成是配置文件写错了,php-fpm -t 会把出错的文件和行号直接报出来。这一步能解决掉相当比例的 502。

第二段,也是最常踩的坑:socket 路径对不上。Nginx 里的 fastcgi_pass 指向的 socket,必须和 FPM 池配置里的 listen 完全一致。升过 PHP 版本的人对此应该有印象——系统装的是 php8.3-fpm.sock,配置里还写着 php8.2-fpm.sock,路径对不上,每个请求都是 502。两边 grep 一下对照,十秒钟的事。

第三段,权限。socket 文件确实存在,Nginx 依然连不上,日志里会出现 Permission denied。这时候别急着 chmod 777,那只是掩盖问题,重启之后还会复现。正确做法是在池配置里指明 socket 的属主属组和权限,让它每次重启都生成正确的。

第四段,进程耗尽。这类 502 最阴险,因为它挑时间——凌晨两点一切正常,白天高峰期突然全站 502。特征是 FPM 日志里出现 server reached pm.max_children,意思是进程开到上限了,新请求排不上队。默认的 pm.max_children 通常只有 5,稍有流量就不够用。

#!/bin/bash
# 502 四段定位:存活 -> 路径 -> 权限 -> 进程数
LOG="/var/log/nginx/error.log"

echo "--- 1. FPM 是否存活 ---"
systemctl is-active php-fpm 2>/dev/null || systemctl is-active 'php*-fpm' 2>/dev/null
php-fpm -t 2>&1 | tail -n 3

echo "--- 2. 监听与转发是否一致 ---"
echo "[FPM listen]"; grep -R "^listen" /etc/php/*/fpm/pool.d/ 2>/dev/null
echo "[Nginx fastcgi_pass]"; grep -R "fastcgi_pass" /etc/nginx/ 2>/dev/null

echo "--- 3. socket 属主与权限 ---"
stat -c "%U:%G %a %n" /run/php/*.sock 2>/dev/null

echo "--- 4. error.log 关键字归类 ---"
grep -oE "Connection refused|No such file or directory|Permission denied|recv\(\) failed|too big header|max_children" \
"$LOG" | sort | uniq -c | sort -rn

日志里那几个关键字基本能对号入座:Connection refused 是上游根本没监听;No such file or directory 是 socket 路径写错了;Permission denied 是权限;recv() failed 多半是 PHP 进程中途被杀,常见于内存不足被 OOM 干掉;too big header 是响应头超了缓冲区;max_children 就是进程数打满。一个关键字对应一条明确的处置路径,不用猜。

改完务必走一遍 nginx -t 再 reload,别直接 restart。reload 是平滑重载,已有的连接不会断;restart 会把正在处理的请求一起掐掉,在生产环境上这是无谓的额外损失。

顺带说一句,如果你近期动过 PHP 版本或做过系统大版本升级,突然全站 502,别往复杂了想,先去对 socket 路径。十个里有七八个是这个原因,剩下的才是权限和进程数。

数据来源:Nginx ngx_http_fastcgi_module 官方文档 

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

相关标签
网站服务器
服务器

相关文章

  • 服务器故障排查总纲:按现象反查的五层定位法

    网站挂了的那一刻,绝大多数人的第一反应是重启。重启Nginx、重启PHP、实在不行重启服务器。这套动作有一半概率管用,但管用的那一次你也不知道为什么管用。下次它还会来,而且大概率挑你最忙的时候来。我后来给自己定了条规矩:不管什么故障,都按固定的五层顺序往下查,每层只用一两条命令确认是或不是,绝不跳层

  • 服务器安全基线审计:Lynis一条命令查出你的薄弱项

    服务器被入侵一次,站长往往才知道安全配置有多重要。问题是Linux安全配置分散在SSH、防火墙、内核参数、文件权限、软件包等几十个地方,人工逐项检查不现实。Lynis就是专门解决这个问题的自动化审计工具。Lynis3.1.7是2026年6月发布的版本,包含448多项检查、39个安全领域,跑完会给出一

    标签:
    网站服务器
  • 服务器稳定性不能靠感觉:用Uptime Kuma自建监控,宕机比用户先知道

    网站挂了半小时,你从用户群里才知道——这种事每个老站长都经历过。VPS重启、进程崩掉、证书过期、DNS抽风,故障原因五花八门,但应对方式就一个:监控。UptimeKuma是目前最火的自托管监控工具,GitHub上超过九万星,2026年8月22日刚更新到2.5.3版。免费、开源、一条Docker命令就

  • 服务器卡了先别重启:top命令五个数字,一分钟定位病根

    服务器一卡,很多人的第一反应是重启。重启确实能“解决”问题,但病根没找,明天同一时间照样卡。top命令开着看一分钟,负载高在哪基本就有数了。第一眼看loadaverage,三个数字分别是1分钟、5分钟、15分钟负载。判断标准拿CPU核数做参照:4核机器,负载4算满载,8就是超载。1分钟远高于15分钟

    标签:
    php教程
    服务器
  • WAF不是大站专利:ModSecurity加OWASP免费规则,老站也能上

    WAF这个词听着像金融级配置,其实开源方案零授权费。ModSecurity是老牌WAF引擎,OWASPCRS是一套社区维护的攻击特征规则,两个加起来能挡住绝大多数SQL注入、XSS、路径穿越扫描。你被WebShell和注入攻击折腾过的站,这套东西值得配一次。Nginx上跑ModSecurity用v3

热门排行

信息推荐