web-dev-qa-db-fra.com

Fichier non trouvé lors de l'exécution PHP avec Nginx

Récemment, j'ai installé la dernière version de Nginx et on dirait que j'ai du mal à exécuter PHP avec elle.

Voici le fichier de configuration que j'utilise pour le domaine:

server {
listen       80;
server_name  localhost;

location / {
    root   /usr/share/nginx/html;
    index  index.php;
}

error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    include        fastcgi_params;
}

}

Voici l'erreur que je reçois dans le fichier journal des erreurs:

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

Essayez un autre * fastcgi_param * quelque chose comme

fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
64
deagh

J'avais le problème "fichier non trouvé", alors j'ai déplacé la définition "racine" vers le haut dans le crochet "serveur" pour fournir une valeur par défaut pour tous les emplacements. Vous pouvez toujours remplacer ceci en donnant à n'importe quel emplacement sa propre racine.

server {
    root /usr/share/nginx/www;
    location / {
            #root /usr/share/nginx/www;
    }

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi_params;
    }
}

Alternativement, j'aurais pu définir la racine dans mes deux emplacements.

41
dogatonic

Il est probablement trop tard pour répondre, mais quelques choses étant donné que c'est une erreur vraiment ennuyeuse. La solution suivante a fonctionné sur Mac OS X Yosemite.

  1. C'est le meilleur si tu as

fastcgi_param SCRIPT_FILENAME $ racine_document $ $ fastcgi_script_name;

  1. Les paramètres include avec fast cgi doivent aller au-dessus de cette ligne.

  2. Tous vos répertoires jusqu’au PHP que vous exécutez (y compris ce fichier également) doivent avoir a+x autorisations, par exemple.

Sudo chmod a+x /Users/
Sudo chmod a+x /Users/oleg/
Sudo chmod a+x /Users/oleg/www/
Sudo chmod a+x /Users/oleg/www/a.php
11
Oleg Berman

J'avais les mêmes problèmes, et lors de mes tests, j'ai rencontré les deux problèmes:

1º: "Fichier non trouvé"

et

2º: 404 page d'erreur

Et j'ai découvert que, dans mon cas:

J'ai dû monter des volumes pour mes dossiers publics à la fois sur les volumes Nginx et sur les volumes PHP.

S'il est monté dans Nginx et n'est pas monté dans [~ # ~] php [~ # ~] , cela donnera: " Fichier non trouvé "

Exemples (affichera "Erreur de fichier introuvable"):


services:
  php-fpm:
    build:
      context: ./docker/php-fpm
  nginx:
    build:
      context: ./docker/nginx
    volumes:
        #Nginx Global Configurations
      - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./docker/nginx/conf.d/:/etc/nginx/conf.d

        #Nginx Configurations for you Sites:

        # - Nginx Server block
      - ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
        # - Copy Public Folder:
      - ./sites/example.com/root/public/:/var/www/example.com/public
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - php-fpm
    restart: always

S'il est monté dans [~ # ~] php [~ # ~] et n'est pas monté dans Nginx , cela donnera une erreur 404 Page Not Found .

Exemple (erreur de 404 pages non trouvées):

version: '3'

services:
  php-fpm:
    build:
      context: ./docker/php-fpm
    volumes:
      - ./sites/example.com/root/public/:/var/www/example.com/public
  nginx:
    build:
      context: ./docker/nginx
    volumes:
        #Nginx Global Configurations
      - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./docker/nginx/conf.d/:/etc/nginx/conf.d

        #Nginx Configurations for you Sites:

        # - Nginx Server block
      - ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - php-fpm
    restart: always

Et cela fonctionnerait très bien (montage des deux côtés) (en supposant que tout le reste est bien configuré et que vous faites face au même problème que moi):

version: '3'

services:
  php-fpm:
    build:
      context: ./docker/php-fpm
    volumes:
      # Mount PHP for Public Folder
      - ./sites/example.com/root/public/:/var/www/example.com/public
  nginx:
    build:
      context: ./docker/nginx
    volumes:
        #Nginx Global Configurations
      - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./docker/nginx/conf.d/:/etc/nginx/conf.d

        #Nginx Configurations for you Sites:

        # - Nginx Server block
      - ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
        # - Copy Public Folder:
      - ./sites/example.com/root/public/:/var/www/example.com/public
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - php-fpm
    restart: always

Voici également un exemple de projet complet utilisant Nginx/Php pour desservir plusieurs sites: https://github.com/Pablo-Camara/simple-multi-site-docker-compose-nginx-Alpine-php-fpm -Alpine-https-ssl-certificates

J'espère que cela aidera quelqu'un. Et si quelqu'un en sait plus à ce sujet, merci de me le faire savoir, merci !

3
Pablo Camara

Je viens de passer 40 minutes à essayer de déboguer un statut/problème avec:

$ SCRIPT_NAME=/status SCRIPT_FILENAME=/status QUERY_STRING= REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php5-fpm.sock

Il vient de produire une erreur "Fichier non trouvé", alors que les scripts réels (qui se trouvent sur le système de fichiers) fonctionnaient parfaitement.

En fin de compte, j'ai eu quelques processus orphelins de php5-fpm. Après avoir tout tué et redémarré proprement php5-fpm, tout est revenu à la normale.

J'espère que cela t'aides.

3
Alex A.

Dans mon cas, le script PHP lui-même a renvoyé le code 404. N'avait rien à voir avec Nginx.

2
PHZ.fi-Pharazon

Dans mon cas, c'était parce que les autorisations sur le répertoire Web racine n'étaient pas définies correctement. Pour ce faire, vous devez être dans le dossier parent lorsque vous l'exécutez dans le terminal:

Sudo chmod -R 755 htmlfoldername

Ceci chmod tous les fichiers de votre dossier html, ce qui n’est pas recommandé pour la production, mais devrait vous permettre de voir les fichiers dans ce dossier, pour être sûr que ce n’est pas le problème lors du dépannage.

2
rncrtr

J'ai eu cette erreur aussi. Dans mon cas, c'était parce qu'il y avait un autre hôte virtuel qui pointait vers le même répertoire racine.

1
Sarcastron

Après la mise à niveau vers PHP72, nous avons eu un problème où php-fpm.d/www.conf a perdu les paramètres de l'utilisateur/du groupe à l'origine de cette erreur. Assurez-vous de vérifier ces informations si votre configuration implique php-fpm.

1
Aepod

Pour moi, le problème était Typo dans le chemin de l'emplacement.

Peut-être que la première chose à vérifier pour ce genre de problème

Est le chemin à projeter.

0
Stevan Tosic

Lors de l'obtention de "Fichier non trouvé", mon problème était qu'il n'y avait aucun lien symbolique dans le dossier où pointait cette ligne dans ngix config:

root /var/www/claims/web;
0
Darius.V