LNMPA 502 Bad Gateway 的原因与解决方法(Nginx 与 PHP-FPM 排查全攻略)

0
30

适用场景:在 LNMPA 环境中(Linux + Nginx + MySQL + PHP + Apache),如果访问网站提示 502 Bad Gateway,通常代表 Nginx 无法正常与 PHP-FPM 通信。本文将从原理、错误原因与解决方案三个层面为你详细讲解。


一、什么是 502 Bad Gateway?

定义:502 错误表示 Nginx 作为反向代理无法从上游(Upstream)服务器获得有效响应。
在 LNMPA 架构中,上游服务器通常是 php-fpmapache

简而言之:Nginx 没能从 PHP 收到返回结果。


二、常见原因一览

  • PHP-FPM 未启动或崩溃。
  • Nginx 与 PHP-FPM 的通信方式(端口或 Socket)配置错误。
  • FastCGI 超时设置过低。
  • PHP 运行时间过长或脚本卡死。
  • 文件权限不足,导致 Nginx 无法访问 sock 文件。

三、逐项排查与解决方法

1️⃣ 检查 PHP-FPM 是否运行

sudo systemctl status php-fpm

若显示 inactive (dead)failed,可重启:

sudo systemctl restart php-fpm

若问题仍存在,请查看日志:

sudo tail -n 20 /var/log/php-fpm/error.log

2️⃣ 检查 Nginx 与 PHP-FPM 通信配置

打开你的 Nginx 虚拟主机配置文件(通常位于 /etc/nginx/conf.d//usr/local/nginx/conf/vhost/

location ~ \.php$ {
    root /var/www/html;
    fastcgi_pass   127.0.0.1:9000;   # 或者使用 unix:/run/php-fpm.sock
    fastcgi_index  index.php;
    include        fastcgi.conf;
}
  • 若 PHP-FPM 使用 socket 通信,则需写:fastcgi_pass unix:/run/php-fpm.sock;
  • 若使用端口通信(默认):fastcgi_pass 127.0.0.1:9000;

注意:两者必须与 php-fpm.conf 配置一致。

3️⃣ 检查 FastCGI 超时配置

在 Nginx 主配置或虚拟主机配置中,调整超时参数:

fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;

保存后重载配置:

sudo nginx -t && sudo systemctl reload nginx

4️⃣ 检查文件权限与 Socket 权限

若使用 unix:/run/php-fpm.sock,请确保 Nginx 用户(通常是 www-datanginx)对该文件有访问权限。

sudo chown nginx:nginx /run/php-fpm.sock
sudo chmod 660 /run/php-fpm.sock

或在 /etc/php-fpm.d/www.conf 中修改:

listen.owner = nginx
listen.group = nginx
listen.mode  = 0660

5️⃣ 检查 PHP 执行时间与内存限制

若长时间运行脚本(如图片压缩、大文件上传)会触发超时,可修改:

max_execution_time = 300
memory_limit = 512M

修改 /etc/php.ini 或对应 php-fpm.conf 后重启:

sudo systemctl restart php-fpm

四、查看 Nginx 错误日志定位原因

若仍无法解决,请查看日志定位根因:

sudo tail -n 50 /var/log/nginx/error.log

常见错误日志示例:

connect() to unix:/run/php-fpm.sock failed (13: Permission denied)
upstream timed out (110: Connection timed out)
bad gateway while reading response header from upstream

这些关键字可帮助你判断问题出在:
– PHP-FPM 未启动;
– Socket 无权限;
– PHP 脚本超时。


五、宝塔用户特别说明

若使用宝塔面板,请在 “软件商店 → PHP → 设置 → 安装扩展 / 服务管理” 中确认 PHP-FPM 正在运行。
502 错误也可能由 PHP 被误停用引起。


六、总结

  • 502 错误 ≠ 网站挂了,通常是 Nginx ↔ PHP-FPM 连接异常。
  • 服务状态 → 通信方式 → 超时设置 → 权限 → 日志 逐层排查。
  • 修改配置后执行:
    nginx -t && systemctl restart nginx php-fpm

结语:理解 Nginx 与 PHP-FPM 的交互机制,是解决 502 错误的关键。掌握本篇内容后,你能快速恢复 LNMPA 网站运行,避免服务器长时间中断。


延伸阅读


发布回复

请输入评论!
请输入你的名字