web-dev-qa-db-fra.com

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

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

Voici l'entrée access.log:

2013/06/19 16:23:23 [error] 2216#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", Host: "www.ordercloud.lh"

Et voici le fichier des sites disponibles:

server {
# Listening on port 80 without an IP address is only recommended if you are not running multiple v-hosts
    listen       80;
# Bind to the public IP bound to your domain
#listen 127.0.0.11:80;
# Specify this vhost's domain name
    server_name www.ordercloud.lh;
    root /home/willem/git/console/frontend/www;
    index index.php index.html index.htm;

# Specify log locations for current site
    access_log /var/log/access.log;
    error_log /var/log/error.log warn;

# Typically I create a restrictions.conf file that I then include across all of my vhosts
#include conf.d/restrictions.conf;
# I've included the content of my restrictions.conf in-line for this example

# BEGIN restrictions.conf
# Disable logging for favicon
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

# Disable logging for robots.txt
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
# END restrictions.conf

# Typically I create a yiiframework.conf file that I then include across all of my yii vhosts
#include conf.d/yiiframework.conf;
# I've included the content of my yiiframework.conf in-line for this example

# BEGIN yiiframework.conf
# Block access to protected, framework, and nbproject (artifact from Netbeans)
    location ~ /(protected|framework|nbproject) {
        deny all;
        access_log off;
        log_not_found off;
    }

# Block access to theme-folder views directories
    location ~ /themes/\w+/views {
        deny all;
        access_log off;
        log_not_found off;
    }

# Attempt the uri, uri+/, then fall back to yii's index.php with args included
# Note: old examples use IF statements, which nginx considers evil, this approach is more widely supported
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
# END yiiframework.conf

# Tell browser to cache image files for 24 hours, do not log missing images
# I typically keep this after the yii rules, so that there is no conflict with content served by Yii
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires 24h;
        log_not_found off;
    }

# Block for processing PHP files
# Specifically matches URIs ending in .php
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_intercept_errors on;
# Fix for server variables that behave differently under nginx/php-fpm than typically expected
        #fastcgi_split_path_info ^(.+\.php)(/.+)$;
# Include the standard fastcgi_params file included with nginx
        include fastcgi_params;
        #fastcgi_param  PATH_INFO        $fastcgi_path_info;
        #fastcgi_index index.php;
# Override the SCRIPT_FILENAME variable set by fastcgi_params
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
# Pass to upstream PHP-FPM; This must match whatever you name your upstream connection
        fastcgi_pass 127.0.0.1:9000;

    }
}

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

Quelqu'un peut-il conseiller?

11
We0

Ok, donc 3 choses que j'ai trouvées après une journée de lutte

  1. Pour une raison quelconque, quelque chose fonctionnait déjà sur le port 9000 et je suis donc passé à 9001.
  2. Mon site par défaut interceptait mon nouveau site, encore une fois, je ne comprends pas pourquoi, puisqu'il ne le devrait pas, mais je l'ai simplement dissocié.
  3. Nginx ne fait pas automatiquement le lien sym pour les sites disponibles pour Site-enabled. 

J'espère que cela évite des ennuis à quelqu'un!

Voici un lien plus détaillé concernant la défaillance du serveur: https://serverfault.com/questions/517190/nginx-1-fastcgi-sent-in-stderr-primary-script-unknown/517207#517207

5
We0

Ce message du serveur fastcgi signifie généralement que le SCRIPT_FILENAME qui lui a été attribué n’a pas été trouvé ou est inaccessible sous forme de fichier sur son système de fichiers. 

Autorisations d'accès au fichier Checkout sur /home/willem/git/console/frontend/www/index.php

Est-ce 644?

Et/home/willem/git/console/frontend/www /

Est-ce 755?

8
Sergey Bogdanov

Au cas où quelqu'un aurait la même erreur: dans mon cas, le problème était la directive racine manquante dans le bloc d'emplacement dans nginx.conf, comme expliqué dans Arch wiki

6
flower_green

"Le script principal est inconnu" est provoqué par le contexte de sécurité SELinux.

le client obtient la réponse 

Fichier non trouvé.

nginx error.log a le message d'erreur suivant

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

il suffit donc de changer le type de contexte de sécurité du dossier racine Web en httpd_sys_content_t

chcon -R -t httpd_sys_content_t/var/www/show




il y a 3 utilisateurs pour la configuration nginx/php-fpm

/etc/nginx/nginx.conf

user nobody nobody;  ### `user-1`, this is the user run nginx woker process
...
include servers/*.conf;

/etc/nginx/servers/www.conf

location ~ \.php$ {
#   fastcgi_pass 127.0.0.1:9000;  # tcp socket
    fastcgi_pass unix:/var/run/php-fpm/fpm-www.sock;  # unix socket
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

/etc/php-fpm.d/www.conf

[www]
user = Apache  ### `user-2`, this is the user run php-fpm pool process
user = Apache

;listen = 127.0.0.1:9000  # tcp socket
listen = /var/run/php-fpm/fpm-www.sock  # unix socket

listen.onwer = nobody  ### `user-3`, this is the user for unix socket, like /var/run/php-fpm/fpm-www.sock
listen.group = nobody  # for tcp socket, these lines can be commented
listen.mode = 0660

user-1 et user-2 ne doivent pas nécessairement être identiques.

Pour le socket Unix, l'utilisateur 1 doit être identique à l'utilisateur 3, En effet, nginx fastcgi_pass doit disposer d'une autorisation de lecture/écriture sur le socket Unix.

sinon nginx obtiendra 502 passerelle incorrecte , et nginx error.log a le message d'erreur suivant

* 36 connect () à unix: /var/run/php-fpm/fpm-www.sock a échoué (13: autorisation refusée) lors de la connexion à l'amont

3
PLA

Je ne sais pas comment est calculée la racine $ document_root, mais j’ai résolu le problème en veillant à ce que ma racine de document se trouve dans/usr/share/nginx/à l’emplacement du dossier HTML.

1
enRaiser