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


14

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

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

我是nginx和fpm的新手,并且该错误消息对我而言毫无意义(即使Google机器也无济于事!)。任何人都可以阐明可能发生的事情吗?


您可以在定义PHP处理的地方添加nginx配置的一部分吗?
Christopher Perrin

对我而言,以下文章对您有所帮助:nginxlibrary.com/resolving-no-input-file-specified-error。通常,如果出现问题,则会出现此错误SCRIPT_FILENAME
white_gecko

Answers:


18

您应该有一个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执行。)

另外,您root应该server在配置文件的部分而不是location部分中定义。这是最常见的nginx错误配置之一


+1错误文章-确实值得一读,特别是如果您正在学习Nginx。写得很好,入门级,有几个很棒的技巧!

2

这是乘客安装的注意事项。

我刚刚通过乘客从源代码安装了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块设置不正确。请参阅迈克尔·汉普顿(Michael Hamptons)的答案,以获取正确的方法。

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


2

我只是在新版本的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被覆盖。


1

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

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


1
sudo vim /etc/php-fpm.conf

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

我现在测试成功了。


这是对的!嘿,您可以尝试!

当您更改用户和组时,您不会忘记重新启动php-fpm。如果使用centos6,则可以使用以下命令:sudo service php-fpm restart
Love

0

我见过 :

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

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

我意识到这是推测性的,但肯定适合我的情况,也可能会帮助其他人。


0

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

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

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.