如何调试“FastCGI sent in stderr: Primary script unknown while reading response header from upstream”并找到实际的错误消息?

新手上路,请多包涵

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

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

这可能意味着此错误消息或多或少是无用的。

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

所以我重新陈述这个问题——我们如何 调试 这个错误代码?

考虑我们有一个非常简单的站点的情况,只有 phpinfo.php 文件。此外,还有一个非常简单的 nginx 配置,如下所示:

 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-fpm 有详细模式吗?

 /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

原文由 101010 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
2 个回答

要回答您的问题:

  1. 在 php-fpm.d/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 问题。

  • 如果您看到带有 404 的“GET /app.php”,则表示 nginx 正确传递了脚本文件名,但 php-fpm 无法访问此文件(用户“php-fpm:php-fpm”无权访问您的文件,这让我困了 3 个小时)

希望我的回答有帮助。

原文由 Shengjie YU 发布,翻译遵循 CC BY-SA 3.0 许可协议

在我的情况下,发生此错误是因为 php-fpm 无法根据 $document_root 找到文件,即 /etc/nginx/html

通过设置

 location ~ \.php$ {
        root /var/www/html;
        fastcgi_index   index.php;
        ...
    }

PHP-FPM 现在可以正确定位文件。

原文由 deejiw 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题