127 votes

Nginx 1 FastCGI envoyé dans stderr: "Script primaire inconnu"

Ma première fois en utilisant Nginx, mais je suis plus que familier avec Apache et Linux. J'utilise un projet existant et chaque fois que j'essaie de voir le index.php je reçois une erreur 404 Fichier non trouvé.

Voici l'entrée du fichier access.log:

2013/06/19 16:23:23 [error] 2216#0: *1 FastCGI a envoyé dans stderr : "Script principal inconnu" lors de la lecture de l'en-tête de réponse en amont, client : 127.0.0.1, serveur : localhost, requête : "GET /index.php HTTP/1.1", en amont : "fastcgi://127.0.0.1:9000", hôte : "www.ordercloud.lh"

Et voici le fichier sites-available:

serveur {
    définit $chemin_hôte "/home/willem/git/console/www";
    access_log  /www/logs/console-access.log  main;

    server_name  console.ordercloud;
    root   $chemin_hôte/htdocs;
    définit $yii_bootstrap "index.php";

    charset utf-8;

    location / {
        index  index.html $yii_bootstrap;
        try_files $uri $uri/ /$yii_bootstrap?$args;
    }

    location ~ ^/(protected|framework|themes/\w+/views) {
        refuse  all;
    }

    #éviter le traitement des appels aux fichiers statiques inexistants par yii
    location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
        try_files $uri =404;
    }

    # faire passer les scripts PHP au serveur FastCGI écoutant sur 127.0.0.1:9000
    #
    location ~ \.php {
        fastcgi_split_path_info  ^(.+\.php)(.*)$;

        #laisser yii intercepter les appels aux fichiers PHP inexistants
        définit $fsn /$yii_bootstrap;
        si (-f $document_root$fastcgi_script_name){
            définit $fsn $fastcgi_script_name;
        }

        fastcgi_pass   127.0.0.1:9000;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fsn;

        #PATH_INFO et PATH_TRANSLATED peuvent être omis, mais RFC 3875 les spécifie pour CGI
        fastcgi_param  PATH_INFO        $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED  $document_root$fsn;
    }

    location ~ /\.ht {
        refuse  all;
    }
}

Mon /home/willem/git/console appartient à www-data:www-data (mon utilisateur web exécutant php etc) et je lui ai donné des autorisations 777 par frustration...

Mon meilleur pari est qu'il y a quelque chose qui ne va pas avec la configuration, mais je ne peux pas le comprendre...

MISE À JOUR Donc je l'ai déplacé à /var/www/ et utilisé une configuration beaucoup plus basique:

serveur {
    #écoute   80; ## écoute pour ipv4 ; cette ligne est par défaut et implicite
    #écoute   [::]:80 ipv6 seulement par défaut = activé ; ## écoute pour ipv6

    root /var/www/;
    index index.html index.htm;

    #Rendre le site accessible depuis http://localhost/
    server_name console.ordercloud;

    location / {
        root           /var/www/console/frontend/www/;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www;
            include        fastcgi_params;
    }

    location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
            try_files $uri =404;
        }

    location /doc/ {
        alias /usr/share/doc/;
        autoindex on;
        allow 127.0.0.1;
        refuse all;
    }

}

Aussi si j'appelle localhost/console/frontend/www/index.php je reçois un 500 PHP ce qui signifie qu'il est servi là. Il ne sert tout simplement pas à partir de console.ordercloud...

0 votes

Une autre cause possible : Si vous utilisez php-fpm, assurez-vous que l'utilisateur défini dans /etc/php-fpm.d/www.conf a les autorisations nécessaires pour exécuter le script. Je pense que par défaut, il est défini sur apache.

0 votes

Une autre cause possible est que votre SElinux est activé, vérifiez la configuration SElinux et désactivez-le.

0 votes

Je viens de passer ma configuration d'hébergement de FCGId (exécuté en tant que propriétaire de serveur virtuel) à FPM (exécuté en tant que propriétaire de serveur virtuel). En plus d'installer PhP 7.2-fpm, cli et plus encore ...

0voto

Christian Points 1

J'ai trouvé votre question en cherchant le même message d'erreur mais en utilisant apache + php-fpm (pas nginx). Pour moi, le problème était une barre oblique mal placée : de nombreuses suggestions de configuration incluent une ligne de la forme :

SetHandler "proxy:unix:/chemin/vers/fichier.socket|fcgi://localhost/:9000"

En plaçant la dernière barre oblique après le numéro de port comme ceci :

SetHandler "proxy:unix:/chemin/vers/fichier.socket|fcgi://localhost:9000/"

le problème a disparu pour moi. Peut-être pouvez-vous faire quelque chose de similaire

0voto

mtelis Points 191

J'ai été piégé par ce message bizarre pendant très longtemps. Je ne suis pas sûr de la cause car tout fonctionnait pendant un certain temps puis tout à coup a cessé de fonctionner.

Je raccourcissais les URL des wikis comme prescrit par MediaWiki, avec Bitnami / Nginx sur Lightsail.

J'ai recherché et lu de nombreux messages, celui-ci semble résumer tous les scénarios possibles, et je les ai tous essayés :

  • nginx va bien, le dossier php de la racine fonctionne, le sous-dossier ne fonctionne pas
  • une erreur est renvoyée en tant que 404 + une simple chaîne "Fichier non trouvé", pas par nginx
  • ajouter root au serveur, n'a pas fonctionné
  • vérifier les autorisations des dossiers et de php-fpm / nginx, aucun problème la racine et les sous-dossiers sont les mêmes
  • vérifier le manuel de php-fpm pour l'interprétation du code d'erreur, je n'ai pas pu en trouver un
  • activer le journal d'accès de php-fpm, j'ai trouvé que l'URI de la requête était correcte, mais le code 404 est renvoyé
  • essayer d'activer le mode verbeux / débogage pour php-fpm, n'a pas fonctionné, le fichier de journal d'erreurs supposé est toujours vide

Je devais donc essayer le dernier recours, puisque le dossier php de la racine fonctionnait et les sous-dossiers ne fonctionnaient pas, la seule différence majeure entre eux autre que root est que le dossier root utilisait $request_filename et les emplacements de sous-dossiers utilisaient $document_root et $fastcgi_script_name, j'ai donc modifié les paramètres d'emplacement des sous-dossiers pour correspondre à ceux de la racine.

Alors ça a marché...Je ne suis toujours pas sûr pourquoi ça a marché. Parce que lorsque je vérifie le journal d'accès de php-fpm, je vois la même URI, une était 404 et l'autre était 200.

entrez une description de l'image ici

La seule différence était dans la configuration. Étant donné qu'ils produisent la même sortie, je ne sais pas pourquoi le résultat était différent.

Quoi qu'il en soit, j'ai décidé de poster mes 2 cents ici, j'espère que cela aidera.

PS : J'espère vraiment que PHP fournira de meilleurs messages d'erreur et un mode verbeux, car il est vraiment frustrant de ne pas pouvoir isoler le problème et de ne pas pouvoir voir la sortie verbeuse et les informations de débogage.

0voto

GeorgeJ Points 91

Pour ma part, il s'agissait d'extensions.

Mon php-fpm.www.access.log indiquait :

"GET /index.php5" 404

Pourtant, le fichier index du site (MediaWiki) était index.php. Il s'avère que j'avais des extensions mélangées (php vs php5) dans les entrées pertinentes du fichier nginx.conf. Voici une configuration fonctionnelle :

location / {
    index index.php;
    try_files $uri $uri/ = @mediawiki;
}
location = /favicon.ico {
    return 204;
}
location ~ \.php$ {
    fastcgi_pass unix:/var/run/php-fpm.sock;
    include fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /path/to/viki$fastcgi_script_name;
    fastcgi_param DOCUMENT_ROOT /path/to/viki;
    fastcgi_intercept_errors on;
}

location @mediawiki {
    rewrite ^/([^?]*)(?:\?(.*))? /index.php?title=$1&$args last;
}

Vous pouvez faire en sorte que toutes ces entrées utilisent index.php5 à la place, il suffit d'ajouter un fichier index.php5 à la racine avec ce contenu :

`

(pas de balise de fermeture).

`

-1voto

Love Points 97

Je rencontre la même question, mais aucune autre méthode ne m'a aidé à résoudre le problème!

J'ai trouvé la solution, la clé est que: Le droit d'utilisateur Linux mène à la question: FastCGI envoyé dans stderr: "Script principal inconnu"

Parce que l'utilisateur:groupe par défaut de PHP-FPM est apache:apache, mais votre répertoire de code est quelqu'un:d'autres. Vous devriez donc changer le droit d'utilisateur!

J'ai écrit un blog pour résoudre cette question, vous pouvez consulter ce blog:

[Nginx FastCGI sent in stderr: "Primary script unknown"][1] ` [1]: http://geekhades.blogspot.com/2017/06/nginx-fastcgi-sent-in-stderr-primary.html

-1voto

anonymous Points 159

J'ai cloné un site distant, et le fichier wp-config.php déjà existant avait les informations de la base de données du serveur distant.

J'ai résolu ce problème en configurant mon fichier de configuration wordpress local, avec les informations de ma base de données locale.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X