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//var/run/php-fpm.sock(Unix socket) - 对比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到底卡在哪一步。错误信息通常比面板提示详细得多。