Nginx与PHP-FPM连接配置及重装PHP后502错误排查求助
嘿,我来帮你一步步排查这个重装PHP后出现的502错误问题!502 Bad Gateway本质上是Nginx没法和后端的PHP-FPM服务建立有效连接,咱们从基础到细节逐一排查:
第一步:先确认PHP-FPM服务是否正常运行
先看看PHP-FPM有没有在跑,执行命令:systemctl status php7.4-fpm如果显示不是
active (running)状态,先启动它:systemctl start php7.4-fpm顺便设置开机自启避免下次重启出问题:
systemctl enable php7.4-fpm第二步:核对PHP-FPM的监听配置
PHP-FPM一般用Unix Socket或者TCP端口两种方式监听,咱们先找到它的配置:
打开PHP-FPM的池配置文件:nano /etc/php/7.4/fpm/pool.d/www.conf找到
listen这一行,比如可能是:listen = /run/php/php7.4-fpm.sock或者TCP端口形式:
listen = 127.0.0.1:9000把这个监听地址记下来,后面要和Nginx配置对应上。
第三步:检查Nginx项目配置里的PHP处理规则
你的所有项目配置都在/etc/nginx/conf.d/下,打开任意一个项目的配置文件,找到处理.php请求的location块,比如类似这样的结构:location ~ \.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 重点看这一行! fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }这里的
fastcgi_pass必须和你刚才找到的PHP-FPMlisten配置完全一致:如果PHP-FPM用的是Socket,就写Socket路径;如果是TCP端口,就写127.0.0.1:9000(或者对应端口)。要是这里不匹配,肯定会出现502错误。第四步:排查Socket权限问题(如果用Socket的话)
要是PHP-FPM用的是Unix Socket,得确保Nginx进程有访问这个Socket文件的权限。先看Socket的权限:ls -l /run/php/php7.4-fpm.sock正常情况下,所有者和组应该是
www-data(Nginx默认运行用户)。如果权限不对,回到PHP-FPM的www.conf配置文件,修改这两行:listen.owner = www-data listen.group = www-data然后重启PHP-FPM生效:
systemctl restart php7.4-fpm第五步:查看错误日志找具体线索
要是前面的步骤没解决,直接看日志找问题:- Nginx错误日志:
tail -f /var/log/nginx/error.log,里面会明确告诉你是连接被拒绝、权限不够还是路径不对; - PHP-FPM日志:
tail -f /var/log/php7.4-fpm.log,看看有没有启动失败或者池配置错误的信息。
- Nginx错误日志:
第六步:验证配置并重启服务
修改完任何配置后,先检查Nginx配置是否合法:nginx -t显示
test is successful后,重启Nginx和PHP-FPM:systemctl restart nginx systemctl restart php7.4-fpm
另外,别忘了确认php7.4-fpm包有没有被正确安装——有时候重装php-common可能没自动带上这个包,执行下面的命令确保安装:
apt-get install php7.4-fpm
备注:内容来源于stack exchange,提问作者Martin AJ




