Nginx + php5-fpm = "Fichier introuvable"


14

J'ai heurté un mur lors de la configuration d'un site à l'aide de nginx / fpm. La page affiche "Fichier introuvable", et cela apparaît dans le nginx error.log:

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

Je suis nouveau sur nginx et fpm, et ce message d'erreur ne signifie rien pour moi (même la machine Google n'a pas aidé!). Quelqu'un peut-il faire la lumière sur ce qui pourrait arriver?


Pourriez-vous ajouter la partie de votre configuration nginx où vous définissez la gestion PHP?
Christopher Perrin

Pour moi, l'article suivant a aidé: nginxlibrary.com/resolving-no-input-file-specified-error . Généralement, cette erreur survient en cas de problème avec le SCRIPT_FILENAME.
white_gecko

Réponses:


18

Vous devriez avoir une locationsection pour gérer les requêtes PHP configurées de la même manière:

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

(L'extra try_filescorrige une vulnérabilité de sécurité qui pourrait permettre l'exécution de fichiers arbitraires en PHP.)

De plus, votre rootdoit être défini dans la serversection du fichier de configuration, pas dans la locationsection. Il s'agit de l'une des erreurs de configuration de nginx les plus courantes .


+1 pour cet article sur les mauvaises configurations - vaut vraiment la peine d'être lu, en particulier si vous apprenez Nginx. Bien écrit, entrée de gamme, avec plusieurs bons conseils!
Ben

2

Ceci est une note pour les installations des passagers.

Je viens d'installer nginx depuis la source via passager, ce qui a causé un problème avec php5-fpm. Le nginx.conf par défaut utilise le problème décrit par Michael Hampton. La solution est de supprimer le blok autour des directives root et index, donc:

location / {
    root html
    index index.html index.htm
}

devient:

root html
index index.html index.htm

De plus, le bloc php est mal configuré. Voir la réponse de Michael Hamptons pour savoir comment s'y prendre.

Une note supplémentaire pourrait être que si php5-fpm est configuré pour utiliser des sockets, pointez le paramètre fastcgi_pass dans le bloc php dans nginx.conf vers la configuration de socket dans /etc/php5/fpm/pool.d/www.conf.


2

Je viens d'avoir ce problème dans une nouvelle version de nginx. (configuration tirée d'une ancienne version)

Ce que je devais faire était de placer le include fastcgi_params;dessus de ma coutume SCRIPT_FILENAMEcomme ceci:

location @web {
        try_files $uri =404;
        include         fastcgi_params;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_param   SCRIPT_FILENAME  $document_root/index.php;
}

Comme le SCRIPT_FILENAMEétait écrasé.


1

Si vous utilisez des alias dans vos blocs d'emplacement, une erreur 404 non gérée peut également présenter ce comportement. Vous pouvez le voir si la page affichée dans le navigateur est le simple texte "Fichier non trouvé" par opposition à la page nginx 404 formatée (centrée) plus jolie. Essentiellement, cela signifie vraiment que la page 404 est introuvable.

Pour résoudre, ajoutez une try_files $uri =404ligne supplémentaire dans votre bloc d'emplacement et rechargez la configuration nginx. En plus de ce que Michael Hampton a dit à propos de la résolution d'une vulnérabilité de sécurité spécifique , cela permet également au gestionnaire fastcgi de remplacer la définition d'alias et de trouver le script 404 à l'emplacement par défaut.


1
sudo vim /etc/php-fpm.conf

à propos de la ligne 149, changer l'utilisateur php et le groupe d'utilisateurs

Je le teste maintenant avec succès.


C'est bien ainsi! Hé mec, tu peux l'essayer!
J'adore le

Lorsque vous changez d'utilisateur et de groupe, n'oubliez pas de redémarrer php-fpm. Si vous utilisez centos6, vous pouvez utiliser cette commande: sudo service php-fpm restart
Love

0

J'ai vu :

FastCGI envoyé dans stderr: "Script primaire inconnu" lors de la lecture de l'en-tête de réponse en amont

dans un serveur que j'ai placé sous forte charge lors des tests de résistance. Mon soupçon, qui reste à confirmer, est que les descripteurs de fichiers disponibles à partir du système d'exploitation ont été épuisés. Dans ce cas, php-fpm ne peut pas obtenir une référence au fichier.

Je me rends compte que c'est spéculatif, mais cela correspond certainement à mon scénario et pourrait également aider quelqu'un d'autre.


0

Merci @homeway, votre réponse m'inspire. Merci beaucoup!

Je rencontre la même question, mais une autre méthode ne m'a pas aidé à résoudre la question!

Je le résous, je trouve que la clé est que: Linux User Right mène à la question: FastCGI envoyé dans stderr: "Script primaire inconnu"

Parce que L'utilisateur par défaut PHP-FPM: group est apache: apache, Mais votre répertoire de code est someBody: someBody. Vous devez donc changer le droit d'utilisateur!

J'écris un blog pour résoudre cette question, vous pouvez voir ce blog:

[Nginx FastCGI envoyé dans stderr: "Script principal inconnu"] [1] `[1]: http://geekhades.blogspot.com/2017/06/nginx-fastcgi-sent-in-stderr-primary.html

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.