502报错本质是Nginx收到请求但PHP-FPM未返回有效响应,核心排查三步:确认PHP-FPM进程存活、Nginx与PHP-FPM通信地址及协议严格一致(TCP端口或socket路径)、检查socket权限或TCP端口可达性及pm.max_children等资源限制。

502报错说明Nginx已收到请求,但PHP-FPM没返回有效响应——不是代码写错了,而是服务链路断了。核心就三件事:PHP-FPM得活着、Nginx能连上它、它还得有余力处理请求。
先看PHP-FPM有没有真在跑
别信宝塔面板上那个“绿色运行中”,要进终端确认:
- 执行 systemctl status php-fpm(或 systemctl status php82-fpm,版本号按你实际用的填)
- 显示 active (running) 才算正常;如果显示 inactive (dead),立刻 systemctl start php-fpm
- 启动失败?用 journalctl -u php-fpm -n 50 --no-pager 看最近50行报错,常见是权限、路径或内存限制问题
检查Nginx和PHP-FPM“说的是否一种语言”
它们必须用完全一致的方式通信,一个走TCP,一个走socket,必然502:
- 查PHP-FPM实际监听地址:grep "listen =" /www/server/php/80/etc/php-fpm.d/www.conf(路径中的80换成你的PHP版本)
- 再打开Nginx站点配置(宝塔里点「网站→设置→配置文件」),找到 fastcgi_pass 那一行
- 两者必须严格匹配:
– 如果PHP-FPM写的是 listen = 127.0.0.1:9000,Nginx就得是 fastcgi_pass 127.0.0.1:9000;
– 如果PHP-FPM写的是 listen = /tmp/php-cgi-80.sock,Nginx就得是 fastcgi_pass unix:/tmp/php-cgi-80.sock;
确认socket文件权限或TCP端口可通
即使地址对了,Nginx进程也得有权限访问:
立即学习“PHP免费学习笔记(深入)”;
- 如果是socket方式,运行 ls -l /tmp/php-cgi-80.sock,看属主属组是不是 www(宝塔默认用户),权限是否含 rw(如 srw-rw----);不对就执行 chown www:www /tmp/php-cgi-80.sock
- 如果是TCP方式(127.0.0.1:9000),执行 netstat -tlnp | grep :9000,确认php-fpm进程确实在监听这个端口
- CentOS/RHEL系统还可能被SELinux拦住,临时放行:setsebool -P httpd_can_network_connect 1
看看PHP-FPM是不是“累瘫了”
服务开着,但所有子进程都卡死或退出,Nginx照样发不出去请求:
- 查PHP-FPM错误日志:/www/server/php/80/var/log/php-fpm.log,重点找 server reached pm.max_children 或 child exited on signal 11
- 查网站错误日志:/www/wwwlogs/你的域名.error.log,常见报错是 Connection refused 或 Connection reset by peer
- 如果真是并发撑爆了,进宝塔PHP设置 → 「配置修改」→ 把 pm.max_children 从默认10调高到20~30(内存够的话),同时调高 pm.start_servers 和 pm.min_spare_servers



















