1Panel Docker 环境下 PHP 报 “Primary script unknown” 404 错误排查实录
发表于 2026年05月16日 Linux , 周边 背景原因解决方案一:修复父目录权限(推荐,符合 1Panel 规范)方案二:临时开放进入权限(快速修复)验证总结 背景 在 2026-5-16 02:43:3 Author: www.uedbox.com(查看原文) 阅读量:5 收藏

背景

在 1Panel 面板中部署 PHP 项目(如 ThinkPHP),访问 .php 文件时页面显示 404 Not Found​ 或 File Not Found 或 502。Nginx 错误日志出现 FastCGI sent in stderr: "Primary script unknown" ,且 PHP-FPM 容器无相关错误日志。

原因

核心原因是 Linux 文件系统权限链断裂

  1. 现象:Nginx 配置正确,宿主机文件存在且权限为 777。
  2. 诊断:使用 namei -l /path/to/file.php 检查权限链。
  3. 真凶:父目录(如 /www/sites )权限为 drwxr-x--- (750) ,属主为 root
  4. 结果:PHP-FPM 容器内的 www-data 用户(即使 UID 相同)属于“其他人(Others)”,因父目录无 x (执行/进入)权限,导致无法进入目录读取文件,从而报 “Primary script unknown”。

解决

打通权限链,确保 PHP-FPM 进程能进入并读取文件。

方案一:修复父目录权限(推荐,符合 1Panel 规范)

/www/sites 的属主改为与 PHP 容器内一致的用户(通常为 www-data ),无需开放全局权限。

# 查看容器内 www-data 的 UID(通常为 1000)

docker exec -it <php-container> id www-data

# 在宿主机修改目录属主为 UID 1000

chown -R 1000:1000 /www/sites

方案二:临时开放进入权限(快速修复)

若不想变更属主,可单独给父目录增加“其他人”的执行权限,允许进入目录。

验证

修复后,再次使用 namei -l 检查,确保每一级目录对 PHP 进程用户均可见。

namei -l /www/sites/your-site/index.php

# 预期结果:sites 目录属主变为 www-data 或权限包含 --x

总结

Docker 环境下,宿主机文件权限与容器内用户 UID 的映射是关键。遇到 PHP 404 时,优先使用 namei -l 检查整个路径链的权限,而非仅关注文件本身。


文章来源: https://www.uedbox.com/post/119799/
如有侵权请联系:admin#unsafe.sh