502错误本质是Nginx无法连接PHP-FPM,主因是二者通信中断;需依次检查php-fpm运行状态、监听地址与Nginx配置是否一致、socket权限是否匹配、以及通过nginx_error.log和php-fpm.log定位具体失败原因。

502错误本质是Nginx无法连上PHP-FPM
宝塔面板显示502,绝大多数情况不是网站代码问题,而是Nginx和PHP-FPM之间的通信断了。Nginx作为反向代理,把PHP请求转发给php-fpm进程处理,如果php-fpm没在跑、监听地址不匹配、权限不对或超时,就会直接返回502。
检查php-fpm服务是否运行且监听正确端口
先确认php-fpm进程有没有起来,再看它监听的是socket还是127.0.0.1:9000这类TCP地址——这必须和Nginx配置里的fastcgi_pass完全一致。
- 执行
ps aux | grep php-fpm,看到master process说明主进程在;若只有grep行,说明没启动 - 查监听方式:
netstat -tlnp | grep :9000(TCP)或ls -l /www/server/php/(Unix socket)/var/run/php-fpm.sock - 对比Nginx站点配置中
fastcgi_pass值:如果是127.0.0.1:9000,但php-fpm实际只监听.sock,必然502
检查php-fpm配置中的user/group与socket权限
用Unix socket时,Nginx worker进程(通常是www用户)必须对.sock文件有读写权限。常见坑是php-fpm以root启动但listen.owner设错,或宝塔升级后www组未加入www-data。
- 打开
/www/server/php/,确认以下三项:/etc/php-fpm.d/www.conf listen.owner = wwwlisten.group = wwwlisten.mode = 0660
- 重启
php-fpm后,用ls -l /www/server/php/验证属主和权限是否匹配/var/run/php-fpm.sock - 若仍报错,临时改
listen.mode = 0666测试,能通说明是权限问题
查看nginx error.log和php-fpm.log定位具体失败原因
光看502没用,得看日志里Nginx到底卡在哪一步。错误信息通常比面板提示详细得多。
立即学习“PHP免费学习笔记(深入)”;
- Nginx错误日志路径:
/www/wwwlogs/nginx_error.log,搜索最近的connect() failed或no live upstreams - PHP-FPM日志路径:
/www/wwwlogs/php-fpm.log或/www/server/php/,关注/var/log/php-fpm.log WARNING: [pool www] child ... exited on signal 11 (SIGSEGV)这类崩溃记录 - 特别注意
recv() failed (104: Connection reset by peer)——大概率是PHP脚本执行超时或内存溢出被php-fpm强制kill
很多502背后其实是PHP进程崩溃或OOM被系统杀掉,而不是配置错误。日志里看不到明显报错时,重点盯php-fpm.log末尾几行和dmesg -T | grep -i "killed process"输出。











