AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 406158
Accepted
Mathew
Mathew
Asked: 2012-07-10 11:19:07 +0800 CST2012-07-10 11:19:07 +0800 CST 2012-07-10 11:19:07 +0800 CST

Nginx + php5-fpm = “找不到文件”

  • 772

我在使用 nginx / fpm 设置站点时遇到了困难。该页面显示“找不到文件”,这出现在 nginx error.log 中:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

我是 nginx 和 fpm 的新手,该错误消息对我来说毫无意义(甚至谷歌机器也没有帮助!)。任何人都可以阐明可能发生的事情吗?

nginx php-fpm socket
  • 7 7 个回答
  • 46943 Views

7 个回答

  • Voted
  1. Best Answer
    Michael Hampton
    2012-07-10T12:00:15+08:002012-07-10T12:00:15+08:00

    您应该有一个location部分来处理配置类似于此的 PHP 请求:

        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass    127.0.0.1:9000;
                fastcgi_index   index.php;
                fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include         fastcgi_params;
        }
    

    (额外try_files解决了一个安全漏洞,该漏洞可能允许任意文件作为 PHP 执行。)

    另外,yourroot应该定义在server配置文件的section中,而不是locationsection. 这是最常见的nginx 配置错误之一。

    • 18
  2. Kenneth
    2013-04-11T03:49:23+08:002013-04-11T03:49:23+08:00

    这是乘客安装的说明。

    我刚刚通过 passenger 从源代码安装了 nginx,这导致了 php5-fpm 的问题。默认的 nginx.conf 使用了 Michael Hampton 描述的问题。解决方案是删除 root 和 index 指令周围的块,因此:

    location / {
        root html
        index index.html index.htm
    }
    

    变成:

    root html
    index index.html index.htm
    

    此外,php 块设置不正确。请参阅迈克尔汉普顿的答案以了解正确的方法。

    额外注意事项可能是,如果 php5-fpm 设置为使用套接字,则将 nginx.conf 中 php 块中的 fastcgi_pass 参数指向 /etc/php5/fpm/pool.d/www.conf 中的套接字设置。

    • 2
  3. complistic
    2014-05-06T22:24:39+08:002014-05-06T22:24:39+08:00

    我刚刚在新版本的 nginx 中遇到了这个问题。(配置取自旧版本)

    我所要做的就是将include fastcgi_params;我的习惯放在上面,SCRIPT_FILENAME如下所示:

    location @web {
            try_files $uri =404;
            include         fastcgi_params;
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_param   SCRIPT_FILENAME  $document_root/index.php;
    }
    

    因为SCRIPT_FILENAME被覆盖了。

    • 2
  4. radiumsoup
    2016-03-25T08:16:38+08:002016-03-25T08:16:38+08:00

    如果您在位置块中使用别名,未处理的 404 错误也可能表现出这种行为。如果浏览器中显示的页面是简单文本“未找到文件”而不是格式更漂亮(居中)的 nginx 404 页面,您可以看到这一点。本质上,它真的是在说找不到404页面。

    要解决这个问题,请在您的位置块中添加try_files $uri =404一行并重新加载 nginx 配置。除了Michael Hampton所说的解决特定安全漏洞之外,这还允许 fastcgi 处理程序覆盖别名定义并在默认位置找到 404 脚本。

    • 1
  5. homeway
    2017-01-13T17:55:23+08:002017-01-13T17:55:23+08:00
    sudo vim /etc/php-fpm.conf
    

    关于第 149 行,更改 php 用户 && 用户组

    我现在测试成功了。

    • 1
  6. Ian Lewis
    2013-04-27T14:56:33+08:002013-04-27T14:56:33+08:00

    我见过 :

    FastCGI 在 stderr 中发送:“主脚本未知”,同时从上游读取响应标头

    在压力测试时我置于高负载下的服务器中。我怀疑操作系统的可用文件句柄已用尽,但仍有待确认。在这种情况下,php-fpm 无法获得对该文件的引用。

    我意识到这是推测性的,但它肯定符合我的情况,也可能对其他人有所帮助。

    • 0
  7. Love
    2017-06-02T00:26:26+08:002017-06-02T00:26:26+08:00

    谢谢@homeway,你的回答启发了我。非常感谢!

    我遇到了同样的问题,但是其他方法并没有帮助我解决问题!

    我解决了,我发现关键是: Linux 用户权限导致问题:FastCGI 在标准错误中发送:“主脚本未知”

    因为 PHP-FPM 默认的 user:group 是 apache:apache,但是你的代码目录是 someBody:someBody。所以你应该更改用户权限!

    我写了一篇博客来解决这个问题,你可以看看这篇博客:

    [标准错误中发送的 Nginx FastCGI:“未知主脚本”][1]`[1]: http: //geekhades.blogspot.com/2017/06/nginx-fastcgi-sent-in-stderr-primary.html

    • 0

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve