网站报 500 错误排查
500 报错的日志定位顺序与常见成因,含 PHP-FPM、会话目录与升级后部分页面报错的修复。
一、现象与定位思路
前台或后台打开页面时返回“500 Internal Server Error”、页面空白,或只显示一句报错,都说明程序在执行过程中中断。浏览器不会告诉你原因,真正的原因一定在日志里,排查第一步是拿到真实错误。
二、按顺序查三处日志
- 站点错误日志:宝塔面板「网站 → 你的站点 → 错误日志」,对应文件
/www/wwwlogs/你的域名.error.log。 - PHP-FPM 日志:
/www/server/php/82/var/log/php-fpm.log,用于确认进程是否异常退出或达到进程上限。 - Nginx 访问日志:
/www/wwwlogs/你的域名.log,用于区分是 500 还是 502。
tail -n 50 /www/wwwlogs/你的域名.error.log
tail -n 50 /www/server/php/82/var/log/php-fpm.log
ps aux | grep php-fpm | head
若日志中没有具体报错,可临时让 PHP 输出错误(仅用于定位,排查完立即关闭):
location ~ [^/]\.php(/|$) {
fastcgi_param PHP_ADMIN_VALUE "display_errors=On";
fastcgi_param PHP_ADMIN_VALUE "error_reporting=E_ALL";
}
三、常见成因对照
| 现象 | 常见原因 | 处理 |
|---|---|---|
| 全站 500 | PHP 版本不兼容或扩展缺失 | 站点切到 PHP 8.2,检查 pdo_mysql、mbstring、gd、fileinfo 扩展 |
| 个别页面 500 | 模板标签写错或模板文件缺失 | 按日志中的文件与行号定位,恢复 template/ 备份 |
| 后台保存后 500 | 配置写入失败 | 检查 config/、data/ 目录可写与数据库连接 |
| 验证码页 500 | 会话目录不可写或 GD 未开启 | 见下面一节 |
| 上传后 500 | 上传目录不可写 | 将 upload/ 属主改为 www 并授予写权限 |
四、会话与临时目录导致的 500
程序运行需要把会话数据、上传临时文件写到系统目录。当 PHP 的会话目录或上传临时目录不存在、不可写时,日志中会出现 session_start(): open(...) failed 或 Unable to create temporary file 一类信息,页面随之报 500。
# 查看当前会话与临时目录配置
php -i | grep -E 'session.save_path|upload_tmp_dir'
# 确认目录存在且 www 用户可写
ls -ld /tmp /var/lib/php/sessions
处理办法:在 PHP 设置中把 session.save_path、upload_tmp_dir 指向站点可写目录(例如 data/session、data/tmp),建好目录后改属主为 www。会话目录不要设在可被外部访问的公开目录下。
五、升级或改动后部分页面报错
若报错出现在更换程序包或改模板之后,多为文件不完整:升级包里 app/、core/ 或 template/ 的部分文件没有覆盖到位。按日志提示的文件与行号,对比备份补回缺失文件。不确定是哪一处改动引起时,用备份做最小二分:先用备份的 template/ 覆盖当前目录,刷新看是否恢复;仍报错就同样验证 app/、core/,直到缩小到单个文件。
提示:排查完成后记得关闭错误显示,清理浏览器缓存与 CDN 缓存再复测一次。