1. ホーム
  2. php

[解決済み] FastCGI sent in stderr.をデバッグする方法。Primary script unknown while reading response header from upstream" をデバッグし、実際のエラーメッセージを見つけるにはどうしたらよいですか?

2022-02-17 18:40:15

質問内容

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

解決方法は?

質問にお答えします。

  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

プライマリ・スクリプトが不明です。

  • 正しいphpファイル名なしで "GET /" が表示された場合、それはnginxのconfの問題です。

  • もし "GET /app.php" が404で表示されたら、nginxはスクリプトファイル名を正しく渡しているが、php-fpmがこのファイルにアクセスできなかったことを意味します(ユーザー "php-fpm:php-fpm" があなたのファイルにアクセスできず、私は3時間トラップされました)。

私の回答がお役に立てれば幸いです。