使用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