Nginx + Php5-fpm ne rend pas les fichiers php

8

J'ai passé des heures à découvrir comment installer Nginx + Ruby Enterprise Edition + PHP5-fpm et MYSQL, enfin tout est installé et tout semble avoir bien commencé.

Mais pour une raison quelconque, les fichiers php ne sont pas traités.

Les fichiers .html fonctionnent bien, mais lorsque j'essaie de visualiser un fichier .php, il semble qu'il n'existe pas, même s'il existe. Fait intéressant, lorsque j'essaie de visualiser un fichier .html qui n'existe pas, j'obtiens un joli message Nginx 404, mais lorsque je regarde un fichier .php, il ne me le donne même pas.

Donc, à ma compréhension pour les novices, il semble que la configuration soit défectueuse, ou que Nginx et PHP-fpm ne se parlent pas.

J'ai regardé autant d'autres exemples de fichiers de configuration nginx et je suis sûr que ce côté des choses va bien. Eh bien ... voici le bit pertinent du fichier conf de toute façon:

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

Et

    fastcgi_connect_timeout 60;
 fastcgi_send_timeout 180;
 fastcgi_read_timeout 180;
 fastcgi_buffer_size 128k;
 fastcgi_buffers 4 256k;
 fastcgi_busy_buffers_size 256k;
 fastcgi_temp_file_write_size 256k;
 fastcgi_intercept_errors on;

Toute aide est grandement appréciée.

edit : Voici les en-têtes renvoyés par le fichier de test php " http://eman.id.au/test.php ":

HTTP/1.1 404 Not Found =>
Server => nginx/0.8.54
Date => Thu, 16 Dec 2010 19:30:30 GMT
Content-Type => text/html
Connection => close
X-Powered-By => PHP/5.3.2-1ubuntu4.5ppa5~lucid1

Emmanuel
la source

Réponses:

10

Je crois que j'ai rencontré exactement le même problème aujourd'hui, nginx envoie la demande à php-fpm (comme indiqué dans l'en-tête) mais vous obtenez un 404, même si le fichier existe et n'a aucune erreur (PHP / syntaxe) du tout, et aucune erreur n'apparaît dans aucun journal (ngins ou php-fpm).

Vous n'avez pas inclus votre configuration complète de nginx, mais est-il possible que vous n'ayez pas l'option "root" définir (correctement?) Dans votre section "serveur"? Vous devez vous assurer de le faire, qu'il pointe vers le bon emplacement de c et qu'il se trouve dans la section "serveur", pas dans une section "emplacement" - par exemple:

server {
    root /var/www/eman;
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
        include fastcgi_params;
    }
}
Fred
la source
Je ne suis pas certain, mais cela aurait pu être le problème
Emmanuel
J'ai fini par reconstruire le VPS et réessayer à l'aide d'un didacticiel différent, et maintenant cela fonctionne bien. :)
Emmanuel
Cela a fonctionné pour moi, et j'utilisais un socket Unix pour le paramètre fastcgi_pass
Sean
1

Si vous jetez un œil aux en-têtes auxquels http://eman.id.au/test.php répond, vous verrez X-Powered-By: PHP/5.3.2-1ubuntu4.5ppa5~lucid1. Cela ne s'afficherait pas si la demande n'était pas transmise à PHP. De plus, si PHP ne peut pas trouver le chemin du fichier qui lui est transmis, il fera écho à l'erreurNo input file specified.

Étant donné que votre site génère l'en-tête powered by et n'a pas l' No input file specified.erreur, la raison la plus probable est que vous avez une erreur dans votre script PHP et que les erreurs d'affichage sont désactivées. Cela se traduit par une page vierge et une entrée dans votre journal d'erreurs, alors regardez-y et voyez si elle ne se remplit pas.

Martin Fjordvald
la source
Ah, c'est vrai !! Je consultais la page dans Google Chrome et cela me donnait juste une erreur 404, mais je viens de la voir dans Firefox et ce n'est qu'une page vierge. Il n'y a aucune erreur dans le script php. En fait, je viens d'enlever tout le php et le seul contenu est un tag h1
Emmanuel
J'ai mis à jour mon message d'origine avec les en-têtes http du fichier test.php
Emmanuel
Et vous êtes absolument certain que vos scripts se trouvent dans / var / www / eman / et que le chemin et les fichiers sont lisibles et exécutables par le processus PHP?
Martin Fjordvald
Oui, ce sont les scripts qui sont définitivement dans / var / www / eman / le fichier test.php est dans le même répertoire que index.html qui fonctionne très bien. Que dois-je vérifier pour m'assurer qu'ils sont lisibles et exécutables par le processus PHP ??? Je ne suis pas certain de ça?
Emmanuel
Eh bien, vous générez PHP d'une manière ou d'une autre via spawn-fcgi ou php-fpm, le fichier de configuration ou la commande utilisée pour générer doit contenir l'utilisateur du processus, après quoi vous devrez vérifier l'autorisation linux pour cet utilisateur.
Martin Fjordvald
0

Quelques pensées:

   fastcgi_param SCRIPT_FILENAME /var/www/eman$fastcgi_script_name;

Faut-il une barre oblique supplémentaire

   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;

NGINX a également un peu de mise en cache étrange, donc lorsque vous essayez l'URL dans votre navigateur, ajoutez un? Random = 12391 à la fin pour forcer un rafraîchissement. J'ai été perplexe pendant 30 minutes sur une configuration pour constater que cela fonctionnait tout au long, mais j'étais trébuché par le cache.

Vous voulez aussi probablement échapper un peu mieux à votre position (bien que cela ne cause pas le problème que vous rencontrez), il est préférable de pratiquer:

location ~ .php$

à

location ~ \.php$

.php $ correspondrait à une demande telle que yourpagephp plutôt que simplement yourpage.php

Andrew Taylor
la source
D'accord, j'ai édité les fichiers de conf, mais pas de chance ...
Emmanuel
L'URL est: eman.id.au/test.php, eman.id.au lui-même fonctionne très bien sur index.html
Emmanuel
La mise en cache n'est pas vraie, Nginx ne met pas en cache tout ce que vous ne lui dites pas spécifiquement. Ce n'est PAS comme Apache cependant, les modifications du fichier de configuration nécessitent un rechargement du fichier de configuration. Votre navigateur mettra également en cache les demandes, c'est donc ce que vous pourriez confondre.
Martin Fjordvald