web-dev-qa-db-fra.com

Débogage du célèbre - FastCGI envoyé dans stderr: "Script primaire inconnu" lors de la lecture de l'en-tête de la réponse depuis l'amont

SO a de nombreux articles mentionnant ce code d'erreur:

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

Cela signifie probablement que ce message d'erreur est plus ou moins inutile. 

Le message nous dit que le gestionnaire FastCGI n'aime pas ce qu'il a été envoyé pour une raison quelconque. Le problème est que, parfois, nous n'avons aucune idée de la raison.

Je répète donc la question - Comment pouvons-nousdebugce code d'erreur?

Considérons le cas où nous avons un site très simple, avec juste le fichier phpinfo.php. En outre, il existe une configuration nginx très simple, comme suit:

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;
    }
}

Comment pouvons-nous voir la sortie/enregistrer exactement ce que fastcgi_params a envoyé au script?

Comment pouvons-nous voir le message d'erreur réel? Dans mon cas, j'utilise php-fpm. Il n'y a aucune information dans le journal à propos de cette erreur. Les journaux n’ajoutent aucune ligne pour cette erreur. Existe-t-il un mode prolixe pour php-fpm?

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

J'ai essayé de définir cela dans le fichier php-fpm.conf

log_level = notice

et ceci dans le fichier php-fpm.d/www.conf:

catch_workers_output = yes
24
010110110101

Pour répondre à ta question:

  1. dans le fichier php-fpm.d/www.conf:

définissez l'entrée access.log:

access.log = /var/log/$pool.access.log
  1. redémarrez le service php-fpm.

  2. essayez d'accéder à votre page

  3. cat /var/log/www.access.log, vous verrez des journaux d'accès comme:

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

Pour résoudre le problème "Script primaire inconnu":

  • si vous voyez "GET /" sans un nom de fichier php correct, alors c'est votre problème avec nginx conf.

  • si vous voyez "GET /app.php" avec 404, cela signifie que nginx transmet correctement le nom du fichier de script mais que php-fpm n'a pas pu accéder à ce fichier dossier qui m’a piégé pendant 3 heures)

J'espère que ma réponse aide.

45
Shengjie YU

Vérifiez la position de root et l'existence du fichier qui s'y trouve. J'ai rencontré cette erreur à cause du chemin d'accès Root TYPO.

0
herbertD