502 bad gateway根因是nginx与php-fpm通信失败,需依次检查php-fpm-74服务状态、listen与fastcgi_pass配置一致性、socket文件权限及重启顺序。

PHP 7.4在宝塔面板部署后网站打不开、显示502 Bad Gateway,说明Nginx已运行但无法与PHP-FPM通信——不是代码问题,而是PHP进程没接上、配置没对齐或权限卡住。
确认PHP-FPM进程是否真实运行
进SSH执行:systemctl status php-fpm-74。如果显示inactive (dead)或failed,说明进程根本没起来。
别直接点宝塔后台“重启”,先看失败原因:执行journalctl -u php-fpm-74 -n 30 --no-pager,重点找ERROR: unable to bind listening socket(端口被占)或failed to load configuration file(配置损坏)。
若日志提示Address already in use,说明9000端口被其他服务(如旧PHP、Docker、残留进程)占用;执行netstat -tuln | grep :9000查PID,再kill -9 PID释放端口。
核对Nginx与PHP-FPM监听方式是否完全一致
方法一:查PHP-FPM实际监听地址
执行grep "^listen =" /www/server/php/74/etc/php-fpm.d/www.conf,输出必须是listen = /tmp/php-cgi-74.sock或listen = 127.0.0.1:9000——注意路径、IP、端口、unix:前缀一个字符都不能错。
方法二:查Nginx站点配置中fastcgi_pass值
进宝塔→网站→你的域名→配置文件→搜索fastcgi_pass,例如fastcgi_pass unix:/tmp/php-cgi-74.sock;或fastcgi_pass 127.0.0.1:9000;。【这两处必须逐字完全相同】
常见坑:升级后Nginx配置里还留着php-cgi-73.sock,而PHP-FPM已切到74;或手动改过listen但没同步更新Nginx配置。
检查socket文件是否存在且权限正确
第一步:确认socket文件路径与PHP-FPM配置中的listen路径一致
比如配置是listen = /tmp/php-cgi-74.sock,就执行ls -l /tmp/php-cgi-74.sock。
第二步:验证属主属组是否为www:www
输出应类似srw-rw---- 1 www www 0 Jun 25 22:10 /tmp/php-cgi-74.sock。如果第一列是root或权限为644,Nginx(以www用户运行)将被拒绝连接。
第三步:权限不对时,不要手动chown,直接删掉sock文件:rm -f /tmp/php-cgi-74.sock,再执行systemctl restart php-fpm-74让PHP-FPM重建它。
强制重载PHP配置并重启服务链
① 进宝塔「软件商店」→ 找到PHP 7.4 →「设置」→「配置修改」→ 确认listen行无误 → 点「保存」→ 再点「重载配置」(仅点「重启」不写入新配置)。
② 返回终端,按顺序执行:systemctl restart php-fpm-74 → systemctl restart nginx。【必须先启PHP-FPM,再启Nginx,否则Nginx加载时找不到后端】
③ 验证通路:执行curl -I http://127.0.0.1,返回HTTP/1.1 200 OK即通;若仍502,立刻查tail -f /www/wwwlogs/nginx_error.log看最新报错行。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











