php环境502或白屏源于nginx与php-fpm通信失败或php脚本异常退出;需先检查php-fpm服务状态,再核对监听方式与nginx配置一致性,最后通过开启错误显示或日志定位脚本问题。

PHP环境出现502 Bad Gateway或页面白屏,说明Nginx已接收到请求但无法从PHP-FPM获得有效响应,或是PHP脚本执行中途崩溃未输出任何内容。这类问题通常不是代码语法错误,而是运行时环境链路断裂。
快速判断是502还是白屏
打开浏览器开发者工具(F12)→ Network标签页 → 刷新页面 → 查看响应状态码和Response内容:
若状态码为【502】且Response为空或显示“Bad Gateway”,说明Nginx与PHP-FPM通信失败;
若状态码为200但Response里什么都没有、Preview空白、Console无报错,则大概率是PHP脚本异常退出或output_buffering被意外关闭导致内容未刷出。
确认PHP-FPM服务是否存活
这一步必须最先做,因为90%的502都源于此。
通过SSH登录服务器,执行:systemctl status php-fpm(或systemctl status php82-fpm,版本号按实际替换)
如果显示active (running),继续下一步;如果显示inactive (dead)或failed,直接执行systemctl start php-fpm并回车。
【注意】宝塔用户请勿只点面板里的“重启PHP”,必须确认终端里进程真实存在——面板有时显示绿色但实际worker全挂了。
检查PHP-FPM监听方式与Nginx配置匹配性
Nginx的proxy_pass必须与PHP-FPM实际监听地址完全一致,协议、IP、端口、socket路径缺一不可。
第一步:查PHP-FPM当前监听方式
运行grep -E "listen[[:space:]]*=" /www/server/php/80/etc/php-fpm.conf(路径中80替换成你实际PHP版本)
若返回listen = 127.0.0.1:9000,说明走TCP;若返回listen = /tmp/php-cgi-80.sock,说明走Unix socket。
第二步:打开宝塔面板 → 网站 → 对应站点 → 设置 → 配置文件
找到location ~ \.php$区块,核对fastcgi_pass值:
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
→ TCP模式下必须写fastcgi_pass 127.0.0.1:9000;,不能写localhost(某些系统DNS解析慢会导致超时);
→ Socket模式下必须写fastcgi_pass unix:/tmp/php-cgi-80.sock;,路径要和php-fpm.conf里listen值一字不差,包括/tmp/开头和.sock后缀。
排查PHP脚本执行中断导致白屏
白屏往往发生在PHP进程启动了但没吐出任何HTML就静默退出,常见于内存耗尽、致命错误被静音、或output_buffering关闭后echo未flush。
方法一:临时开启PHP错误显示
编辑/www/server/php/80/etc/php.ini(版本号对应),找到display_errors = Off改为On,再找error_reporting =行,设为E_ALL & ~E_DEPRECATED & ~E_STRICT,保存后执行systemctl restart php-fpm。
方法二:强制触发错误日志落盘
在出问题的PHP文件最顶部加入:<?php error_log("test log entry", 3, "/tmp/php-debug.log");,然后访问页面,再执行tail -n 20 /tmp/php-debug.log看是否有记录——没记录说明PHP进程根本没走到这一行,问题在更前置环节(如auto_prepend_file加载失败)。
方法三:检查output_buffering是否被关掉
运行php -i | grep output_buffering,若返回output_buffering => Off,则所有echo/print_r都不会缓存,一旦脚本中途die(),浏览器收不到任何字节,必然白屏。此时需在php.ini中设为output_buffering = 4096并重启php-fpm。
验证关键资源是否耗尽
PHP-FPM worker被杀或拒绝新连接,常因内存爆满、子进程数打满、或磁盘写满。
① 查内存:运行free -h,若available低于500MB,PHP-FPM可能被OOM killer干掉;
② 查PHP进程数:运行ps aux | grep php-fpm | wc -l,减去2(grep自身和master进程),若接近pm.max_children设定值,说明并发撑满,需调大该参数;
③ 查磁盘:运行df -h /和df -h /www,若任一挂载点使用率≥95%,Nginx和PHP-FPM日志写入失败,会连锁引发502;
④ 查PHP错误日志:运行tail -n 30 /www/server/php/80/var/log/php-fpm.log,重点搜WARNING: [pool www] child process exited或seccomp字样——后者表明容器环境缺少必要系统调用权限,需联系运维调整安全策略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










