500错误由权限不足引发时,日志中必现“Permission denied”及路径线索;需同步检查Nginx/PHP-FPM错误日志、socket属主权限、完整路径执行/读权限链,并用运行用户手动验证各环节可访问性。

500 报错本身不说明原因,但当它由文件权限不足引发时,错误日志里通常藏着明确线索——关键不是猜,是盯住“Permission denied”和对应路径。
看 Nginx 和 PHP-FPM 日志里的权限关键词
先打开两个日志文件一起查:
-
Nginx 错误日志(如
/var/log/nginx/error.log):搜Permission denied或connect() to unix:/run/php/.*sock failed (13:。括号里的13是 Linux 系统级权限拒绝码,非常可信 -
PHP-FPM 错误日志(如
/var/log/php-fpm/www-error.log或 php.ini 中error_log指定的位置):搜failed to open stream、require(): failed to open、open_basedir restriction。这些往往指向 include/require 文件读取失败,根源常是目录或文件权限不对
确认 PHP-FPM 套接字(socket)的属主和权限
这是最常见出问题的一环。运行命令检查:
-
ls -l /run/php/php*.sock(路径以你实际配置为准,比如php8.2-fpm.sock) - 看输出中用户(user)和组(group)是否匹配 PHP-FPM 配置里设置的
listen.owner和listen.group(通常在/etc/php/*/fpm/pool.d/www.conf中) - 同时确认 Nginx worker 进程的运行用户(如
www-data或nginx)是否属于该 socket 的组,或是否被明确授权访问
检查 PHP 脚本及其依赖路径的权限链
PHP 执行时要能逐级进入目录、读取 .php 文件、加载 require 的其他文件。缺一不可:
立即学习“PHP免费学习笔记(深入)”;
- 用
namei -l /var/www/your-site/index.php查整个路径的属主和权限(namei会显示每一级目录和最终文件) - 确保从根目录到脚本文件的每层目录都有执行(
x)权限给运行用户(否则无法 cd 进入);脚本文件本身要有读(r)权限 - 如果用了
require __DIR__.'/config/db.php';,那config/目录和db.php文件也得满足同样规则
临时验证:用运行用户手动模拟访问
别只靠猜,直接切到 Nginx 或 PHP-FPM 的实际运行用户,试试能否读取关键文件:
sudo -u www-data ls -l /var/www/your-site/index.php-
sudo -u www-data php -l /var/www/your-site/index.php(语法检查,不执行) -
sudo -u www-data cat /run/php/php8.2-fpm.sock(会报错,但能确认是否“Permission denied”)
哪一步卡住,问题就在哪一层。



















