适用场景:在 LNMPA 环境中(Linux + Nginx + MySQL + PHP + Apache),如果访问网站提示 502 Bad Gateway,通常代表 Nginx 无法正常与 PHP-FPM 通信。本文将从原理、错误原因与解决方案三个层面为你详细讲解。
一、什么是 502 Bad Gateway?
定义:502 错误表示 Nginx 作为反向代理无法从上游(Upstream)服务器获得有效响应。
在 LNMPA 架构中,上游服务器通常是 php-fpm 或 apache。
简而言之: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-data 或 nginx)对该文件有访问权限。
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 网站运行,避免服务器长时间中断。
延伸阅读
