web-dev-qa-db-fra.com

Le fragment fastcgi-php.conf de Nginx est manquant

J'essaie de servir PHP avec nginx. J'ai suivi ce tutoriel avec succès auparavant, mais sur un nouveau serveur pour une raison quelconque, l'erreur suivante s'affiche:

 nginx: [emerg] open() "/etc/nginx/snippets/fastcgi-php.conf" failed (2: No such file or directory) 

En fait, le répertoire snippets entier de l'installation nginx est manquant. 

J'ai installé PHP avec les commandes suivantes:
- Sudo apt-get install -y php7.0-cli php7.0-cgi php-fpm php-mysql
- Sudo systemctl restart php7.0-fpm 

J'ai installé le plus récent nginx disponible - et pourtant le répertoire et le fichier ne sont toujours pas présents.

Comment peut-on remédier à cela? 

Bonus: Qu'est-ce qui pourrait avoir causé ça?

4
Ulad Kasach

je pense que cela dépend de la version de Nginx que vous utilisez.

Pour la réponse de Nate, nginx-full installera 1.10.3 pour vous.

J'utilise Nginx 1.12.2 sur Ubuntu 16.04, avec cette version, il n'a pas sites-enabled et sites-available avec elle; et il a également une configuration CGI différente PHP.

Vous pouvez utiliser la solution d'Ulad Kasach ou commencer à utiliser le nouveau moyen.

Voici un document officiel expliquant comment procéder: https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/

BTW, dans post ci-dessus, vous devriez également remplacer fastcgi.conf par fastcgi_params.

Et ajoutez une autre ligne qui est par défaut d'origine:

fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;

Ce sont tous de nouveaux changements avec Nginx 1.12.2 :(

La version finale est:

location ~ \.php$ {
    #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    include fastcgi_params;                
    fastcgi_intercept_errors on;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
13
Yang_2333

A fini par avoir à regarder un fichier de configuration précédent, fonctionnel, et à le répliquer manuellement. Créez simplement le répertoire snippets et ajoutez un fichier fastcgi-php.conf avec le contenu suivant:

# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;

# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;

# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;

fastcgi_index index.php;
include fastcgi.conf;

Vous devrez également remplacer la dernière ligne, include fastcgi.conf; par include fastcgi_params;

J'aurais recommandé de créer le fichier fastcgi.conf; s'il ne s'agissait pas littéralement du même fichier avec la ligne supplémentaire fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; dans le cas de fastcgi.conf 

4
Ulad Kasach

M'avait laissé perplexe un instant aussi. Vous voulez installer le paquet nginx-full sur ubuntu, par opposition à nginx. nginx-full contient les bits qui vous manquaient.

4
Nate

j'utilise 

  1. nginx/1.4.6
  2. Ubuntu 14.04.5 LTS

et ma configuration de site ressemble à ceci 

server {
    listen 3010;

    root /usr/share/nginx/docs;

    # Add index.php to the list if you are using PHP
    index index.php index.html index.htm index.nginx-debian.html;   

    server_name phpSetup;


    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

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

et travaille bien. Je recommande donc de mettre à jour votre fichier config include snippets/fastcgi-php.conf;à 

include fastcgi_params;

donc le bloc d'emplacement est

location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

J'ESPÈRE QUE ÇA AIDE

en savoir plus sur: https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/

merci,

1
insCode