phpEnv如何配置Nginx解决FastCGI Sent in Stderr报错

phpEnv如何配置Nginx解决FastCGI Sent in Stderr报错blockquote Primary script unknown 错误 90 因 SCRIPT FILENAME 路径不匹配 需在 location php 块中显式添加 fastcgi param SCRIPT FILENAME document root fastcgi script name 确保 root 定义在 server 级 php fpm 用户有目录读取权限 blockquote

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



 
  
    
    
“Primary script unknown”错误90%因SCRIPT_FILENAME路径不匹配:需在location ~ .php$块中显式添加fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;,确保root定义在server级、php-fpm用户有目录读取权限,并注意Windows/WSL/Docker路径一致性。

phpenv如何配置nginx解决fastcgi sent in stderr报错

phpEnv 下 Nginx 报 FastCGI sent in stderr: "Primary script unknown",90% 是 SCRIPT_FILENAME 路径没对上,不是 PHP 没装好、也不是端口不通。

phpEnv 默认用 fastcgi_params 文件,但它不包含 SCRIPT_FILENAME —— 这个关键参数得手动补上。否则 nginx 传给 php-fpm 的脚本路径是空或错的,php-fpm 根本找不到 index.php

  • 打开你的 nginx server 块(比如 phpenv/nginx/conf/vhost/your-site.conf
  • location ~ .php\( { ... } 块内,确保有这行:
    fastcgi_param SCRIPT_FILENAME \)document_root\(fastcgi_script_name;



  • 不要写成 /scripts\)fastcgi_script_name 或硬编码路径(如 /wwwroot/…),\(document_root 必须由当前 serverlocationroot 指令定义出来
  • 如果 root 写在 location / 里,但没写在 location ~ .php\) 里,$document_root 在 PHP 块里可能为空——最稳妥是把 root 提到 server 级,或显式复制进 PHP location

phpEnv 启动的 php-fpm 默认用 www 用户,但 Windows 上没有这个用户,Linux/macOS 上若网站目录属主不是 www(或你改过的用户),就会因权限拒绝导致“脚本未知”。

  • 查当前 php-fpm 进程用户:
    ps aux | grep php-fpm | grep -v grep,看输出里 USER 列是什么



  • 检查网站根目录权限:
    ls -ld /path/to/your/webroot,确认该目录可被 php-fpm 用户读取(至少 r-x 对目录,r–.php 文件)



  • 修改 php-fpm 用户(以 Linux 为例):
    编辑 phpenv/php/etc/php-fpm.d/www.conf,改这两行:
    user = www → 改成 user = your_username
    group = www → 改成 group = staff(macOS)或 www-data(Ubuntu)

















  • 改完重启:
    phpenv stop php-fpm && phpenv start php-fpm



phpEnv 在 Windows 上跑时,\(document_root 展开后可能是 C:wwwsite,但 php-fpm(尤其旧版)只认正斜杠 /,且对盘符大小写敏感;更麻烦的是,Windows 的 UNC 路径或长路径嵌套会直接让 php-fpm 返回“unknown”。

立即学习“PHP免费学习笔记(深入)”;

  • 强制统一用正斜杠:
    root C:wwwmyapp; 改成 root /c/www/myapp;(注意是 /c/ 不是 C:/



  • 避免深层嵌套路径:
    别用 C:UsersNameDocumentsphpEnvwwwprojectpublic 这种,移到 C:wwwproject 级别



  • 如果用了 alias(比如映射 /admin 到子目录),\)document_root 不生效,必须显式写死:
    fastcgi_param SCRIPT_FILENAME /c/www/admin/public$fastcgi_script_name;



phpEnv 若跑在 WSL 或 Docker 容器里,宿主机路径和容器内路径不一致时,\(document_root 在 nginx 看是 /var/www/html,但 php-fpm 实际挂载的是 /mnt/c/www,两者对不上就必然报错。

  • 确认 nginx 和 php-fpm 看到的路径完全一致:
    在 nginx 配置里写 root /var/www/html;,就在 php-fpm 的 www.conf 里配 chroot = /var/www/html(慎用)或确保 php_admin_value[doc_root] 指向同一位置



  • 更简单做法:绕过 \)document_root,直接硬编码(仅限调试):
    fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;



  • WSL 用户检查是否启用了 metadata:在 /etc/wsl.conf[automount] options = "metadata",否则 chmod 不生效,php-fpm 拒绝读取

最容易被忽略的是:phpEnv 的 nginx 配置模板常把 include fastcgi_params; 放在 fastcgi_param SCRIPT_FILENAME … 之前,结果后者被覆盖。顺序错了,加了也白加。

小讯
上一篇 2026-04-29 23:43
下一篇 2026-04-29 23:41

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/282657.html