Nginx + php5-fpm =“文件未find”

使用nginx / fpm设置网站时,我碰到了一堵墙。 页面显示“文件未find”,并出现在nginx error.log中:

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

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

您应该有一个location部分来处理类似于此configuration的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应该在configuration文件的server部分定义, 而不是 location部分。 这是最常见的nginx错误configuration之一 。

这是一个安装乘客的说明。

我刚刚从客户端安装了nginx,导致php5-fpm出现问题。 默认的nginx.conf使用Michael Hampton描述的问题。 解决scheme是删除根和索引指令周围的blok,所以:

 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中的套接字设置。

我只是在新版本的nginx中遇到了这个问题。 (configuration取自旧版本)

我所要做的就是放置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被覆盖。

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

为了解决这个问题,在你的位置块中添加一个额外的try_files $uri =404行并重新加载nginxconfiguration。 除了迈克尔·汉普顿(Michael Hampton)关于解决特定安全漏洞的问题之外 ,还允许fastcgi处理程序覆盖别名定义,并在默认位置查找404脚本。

 sudo vim /etc/php-fpm.conf 

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

我现在testing成功了。

我见过 :

在读取来自上游的响应标题时,FastCGI以stderr发送:“主脚本未知”

在压力testing时,我放置在高负载的服务器上。 我怀疑,还有待确认的是,来自操作系统的可用文件句柄已经耗尽。 在这种情况下,php-fpm无法获得对该文件的引用。

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

谢谢@homeway,你的回答激励着我。 非常感谢你!

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

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

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

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

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