183 votes

nginx affiche des pages PHP vides

J'ai installé un serveur nginx avec php5-fpm. Lorsque j'essaie de charger le site, j'obtiens une page blanche sans erreur. Les pages html sont bien servies mais pas les pages php. J'ai essayé d'activer l'option display_errors dans le php.ini, mais sans succès. Le fichier php5-fpm.log ne produit aucune erreur et nginx non plus.

nginx.conf

server {
    listen 80;
    root /home/mike/www/606club;
    index index.php index.html;
    server_name mikeglaz.com www.mikeglaz.com;
    error_log /var/log/nginx/error.log;
    location ~ \.php$ {
            #fastcgi_pass 127.0.0.1:9000;
            # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }
}

EDIT

voici mon journal d'erreurs nginx :

2013/03/15 03:52:55 [error] 1020#0: *55 open() "/home/mike/www/606club/robots.txt" failed (2: No such file or directory), client: 199.30.20.40, server: mikeglaz.com, request: "GET /robots.txt HTTP/1.1", host: "mikeglaz.com"

2 votes

Apparemment, php-fpm n'a pas été appelé par nginx, avez-vous vérifié le journal des erreurs de nginx ?

0 votes

Vérifiez ma mise à jour ci-dessus.

0 votes

L'erreur nginx connect() failed ... fastcgi://127.0.0.1:9000 contredit votre conf nginx, rechargez le conf nginx ?

361voto

spacepille Points 241

remplacer

include fastcgi_params;

avec

include fastcgi.conf;

et supprimer fastcgi_param SCRIPT_FILENAME ... dans nginx.conf

18 votes

Cela a réglé le problème pour moi. Le site .conf a un paramètre de configuration supplémentaire qui manque dans _params .

0 votes

L'ajout de cette ligne (lien vers /opt/nginx/conf/fastcgi.conf sur mon ubuntu 12.0.4) vient de fonctionner pour moi, merci !

8 votes

Ceci (et, bien sûr, /etc/init.d/nginx restart ) l'a également corrigé pour moi sur Debian Testing aprÃ?s un nginx mise à niveau le 10 septembre 2014.

266voto

Julian H. Lam Points 5174

Pour référence, je joins mon location pour attraper les fichiers avec l'option .php extension :

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

Vérifiez deux fois le /path/to/fastcgi-params et assurez-vous qu'il est présent et lisible par l'utilisateur de nginx.

0 votes

Est-ce que $fastcgi_script_name est une variable ou un nom de fichier... Je n'arrive pas à le trouver.

3 votes

votre solution en faisait partie. L'autre partie est ici wildlyinaccurate.com/solving-502-bad-gateway-with-nginx-php-fpm (en anglais)

163 votes

la dernière ligne avec 'SCRIPT_FILENAME' a fait l'affaire pour moi :) merci

57voto

Constant M Points 631

J'ai également eu ce problème et j'ai finalement trouvé la solution ici . En bref, vous devez ajouter la ligne suivante à votre fichier de configuration fastcgi nginx (/etc/nginx/fastcgi_params dans Ubuntu 12.04)

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;

2 votes

Merci beaucoup, cela a corrigé le problème sur Ubuntu 12.04 LTS.

2 votes

Réparé pour moi aussi après avoir mis à jour nginx 1.5.4 -> 1.7.4. Merci beaucoup !

4 votes

Fonctionne sur Ubuntu 14.04.

15voto

tudor Points 170

J'ai écrit un petit programme en C qui renvoie les variables d'environnement passées par nginx à l'application fastCGI.

#include <stdlib.h>
#include <fcgi_stdio.h>
extern char **environ;

int main(int argc, char **argv) {
    char *envvar;
    int i;

    int count = 0;
    while(FCGI_Accept() >= 0) {
        printf("Content-type: text/html\n\n"
               "<html><head><title>FastCGI Call Debug Tool</title></head>\n"
               "<body><h1>FastCGI Call Debugging Tool</h1>\n"
               "<p>Request number %d running on host <i>%s</i></p>\n"
               "<h2>Environment Variables</h2><p>\n",
              ++count, getenv("SERVER_NAME"));
        i = 0;
        envvar = environ[i];
        while (envvar != NULL) {
                printf("%s<br/>",envvar);
                envvar = environ[++i];
        }
        printf("</p></body></html>\n");
    }
    return 0;
}

Sauvegardez-le dans un fichier, par ex. fcgi_debug.c

Pour le compiler, installez d'abord gcc et libfcgi-dev puis exécuter :

gcc -o fcgi_debug fcgi_debug.c -lfcgi

Pour l'exécuter, installez spawn-fcgi puis exécuter :

spawn-fcgi -p 3000 -f /path/to/fcgi_debug

Ensuite, modifiez la configuration de votre fcgi nginx pour qu'il pointe vers le programme de débogage :

fastcgi_pass  127.0.0.1:3000;

Redémarrez nginx, rafraîchissez la page, et vous devriez voir tous les paramètres apparaître dans votre navigateur pour que vous puissiez les déboguer :-)

1 votes

Attention, vous avez besoin des en-têtes et de spawn-fcgi. Sur Debian/Ubuntu, vous pouvez les obtenir par apt-get install spawn-fcgi libfcgi-dev .

7voto

Ces conseils m'ont aidé dans mon installation d'Ubuntu 14.04 LTS,

En outre, j'ai dû activer le short_open_tag sur /etc/php5/fpm/php.ini

$ sudo kate /etc/php5/fpm/php.ini

short_open_tag = On

$ sudo service php5-fpm restart
$ sudo service nginx reload

0 votes

Cela a été corrigé par l'installation de DO droplet Ubuntu. Merci

0 votes

Ce problème a été résolu pour moi après l'installation de nginx 1.9.4.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X