«

Nginx报502 Bad Gateway完整排查思路(PHP-FPM场景)

时间:2026-10-4 19:27     作者:emer     分类: 无


Nginx 出现 502 Bad Gateway 是最常见的报错之一,90% 的情况都是 PHP-FPM 出了问题。下面是完整的排查思路,按顺序一步步来,基本都能解决。

1. 先看 PHP-FPM 是否在运行

systemctl status php-fpm

如果显示 failed 或 inactive,直接重启:

systemctl restart php-fpm

注意:CentOS 7 一般是 php-fpm,Ubuntu 可能是 php7.4-fpm 之类的,看你装的版本。

2. 看 Nginx 错误日志(最关键)

tail -f /var/log/nginx/error.log

常见错误信息:

错误1:connect() failed (111: Connection refused) while connecting to upstream
说明 PHP-FPM 没启动,或者监听地址不对。

错误2:upstream timed out
PHP 脚本执行超时了,或者 PHP-FPM 进程不够用。

错误3:Primary script unknown
Nginx 配置里的 SCRIPT_FILENAME 路径不对,找不到 PHP 文件。

3. 检查 Nginx 配置是否正确

nginx -t

如果显示 test is successful 说明配置语法没问题。

重点检查 fastcgi_pass 这一行:

location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;  # 或者 unix:/run/php-fpm/www.sock
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

常见问题:

4. 检查 PHP-FPM 监听地址

netstat -tlnp | grep php-fpm

或者:

ss -tlnp | grep php-fpm

看 PHP-FPM 是监听在 9000 端口还是 unix sock 文件,然后和 Nginx 配置里的 fastcgi_pass 对应上。

5. 检查 PHP-FPM 进程数是否够

看 PHP-FPM 配置:

vi /etc/php-fpm.d/www.conf

重点参数:

pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30

如果访问量大,进程数不够就会 502。

6. 检查 PHP 错误日志

tail -f /var/log/php-fpm/www-error.log

有时候 PHP 代码本身报错,也会导致 502。

7. 其他常见原因

磁盘满了

df -h

内存不够

free -h

如果内存不足,PHP-FPM 进程会被杀掉,也会 502。

SELinux 没关
参考我之前的文章,关掉 SELinux 试试。

排查顺序总结

  1. 重启 PHP-FPM → 看能不能恢复
  2. 看 Nginx 错误日志 → 定位具体错误
  3. 检查 Nginx 配置 → fastcgi_pass 和 SCRIPT_FILENAME
  4. 检查 PHP-FPM 状态 → 监听地址、进程数
  5. 检查系统资源 → 磁盘、内存
  6. 检查 SELinux

遇到服务器、Nginx、MySQL 报错,可以加微信远程协助排查问题。

标签: PHP-FPM Nginx 502 报错 排查