在读取来自上游的响应报头时debugging着名的 – 在stderr中发送的FastCGI:“主脚本未知”

所以有很多文章提到这个错误代码:

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

这可能意味着这个错误信息或多或less是无用的。

该消息告诉我们FastCGI处理程序不喜欢因为某种原因而发送的任何内容。 问题是有时我们不知道原因是什么。

所以我重申了这个问题 – 我们如何debugging这个错误代码?

考虑一下我们有一个非常简单的网站,只有phpinfo.php文件的情况。 另外,还有一个非常简单的nginxconfiguration,如下所示:

 server { server_name testsite.local; root /var/local/mysite/; location / { index index.html index.htm index.php; } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass fastcgi_backend; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 

我们怎样才能看到输出/日志究竟是什么fastcgi_params发送到脚本?

我们如何看到实际的错误信息? 在我的情况下,我使用php-fpm。 它在日志中没有关于这个错误的信息。 日志不会附加此错误的任何行。 有一个详细的模式为PHP的FMP?

 /var/log/php-fpm/error.log /var/log/php-fpm/www-error.log 

我试图在php-fpm.conf文件中设置它

 log_level = notice 

这在php-fpm.d / www.conf文件中:

 catch_workers_output = yes 

回答你的问题:

  1. 在php-fpm.d / http://www.conf文件中:

设置access.log条目:

 access.log = /var/log/$pool.access.log 
  1. 重新启动php-fpm服务。

  2. 尝试访问你的页面

  3. cat /var/log/www.access.log,你会看到如下的访问日志:

- - 10/Nov/2016:19:02:11 +0000 "GET /app.php" 404 - - 10/Nov/2016:19:02:37 +0000 "GET /app.php" 404

解决“主脚本未知”问题:

  • 如果你看到“GET /”没有一个正确的PHP文件名。 那么这是你的nginx conf问题。

  • 如果您看到“GET /app.php”为404,意味着nginx正确传递了脚本文件名,但是php-fpm无法访问此文件(用户“php-fpm:php-fpm”无法访问您的文件,被困我3个小时)

希望我的回答有帮助。