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
Essayez un autre * fastcgi_param * quelque chose comme
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
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.
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.
fastcgi_param SCRIPT_FILENAME $ racine_document $ $ fastcgi_script_name;
Les paramètres include avec fast cgi doivent aller au-dessus de cette ligne.
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
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 !
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.
Dans mon cas, le script PHP lui-même a renvoyé le code 404. N'avait rien à voir avec Nginx.
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.
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.
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.
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.
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;