web-dev-qa-db-fra.com

nginx vide PHP des pages

J'ai installé un serveur Nginx avec php5-fpm. Lorsque j'essaie de charger le site, je reçois une page vierge sans erreur. Les pages HTML sont bien servies mais pas php. J'ai essayé d'activer display_errors dans php.ini mais pas de chance. 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;
    }
}

MODIFIER

voici mon journal des 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"
146
mikeglaz

Pour référence, je joins mon bloc location pour la capture de fichiers avec l'extension .php:

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 nginx.

228
Julian H. Lam

remplacer

include fastcgi_params;

avec

include fastcgi.conf;

et supprimez fastcgi_param SCRIPT_FILENAME ... dans nginx.conf

311
spacepille

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

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
52
Constant Meiring

De nombreux utilisateurs tombent dans ce fil en espérant trouver une solution pour l'affichage de pages vierges avec nginx + php-fpm , moi-même. Ceci est un récapitulatif de ce que j'ai fini par faire après avoir lu de nombreuses réponses ici plus mes propres enquêtes (mis à jour en php7.2):

1) Ouvrez /etc/php/7.2/fpm/pool.d/www.conf et vérifiez la valeur du paramètre listen.

listen = /var/run/php/php7.2-fpm.sock

2) Le paramètre listen doit correspondre au paramètre fastcgi_pass dans le fichier de configuration de votre site (i, e: /etc/nginx/sites-enabled/default).

fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;

3) Vérifiez que le fichier existe réellement:

$ file /var/run/php/php7.2-fpm.sock 
/var/run/php/php7.2-fpm.sock: socket

4) S'il n'existe pas, cela signifie que php7.2-fpm n'est pas en cours d'exécution, vous devez donc le redémarrer:

$ Sudo /etc/init.d/php7.2-fpm restart
[ ok ] Restarting php7.2-fpm (via systemctl): php7.2-fpm.service.


En ce qui concerne la section location dans /etc/nginx/sites-enabled/default:

   # pass PHP scripts to FastCGI server
   #
   location ~ \.php$ {
      include snippets/fastcgi-php.conf;

      # With php-fpm (or other unix sockets):
      fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
   }

Vérifiez que le fichier snippets/fastcgi-php.conf existe à l'emplacement /etc/nginx/:

$ file /etc/nginx/snippets/fastcgi-php.conf
/etc/nginx/snippets/fastcgi-php.conf: ASCII text

Ce fichier contient une liste de définitions de variables requises par php7.2-fpm. Les variables sont définies directement ou via l’inclusion d’un fichier séparé.

 include fastcgi.conf;

Ce fichier est situé à /etc/nginx/fastcgi.conf et ressemble à ceci:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
...
fastcgi_param  REDIRECT_STATUS    200;

nginx inclut deux fichiers de paramètres possibles: fastcgi_params et fastcgi.conf. La différence entre les deux correspond à la définition de la variable SCRIPT_FILENAME:

$ diff fastcgi_params fastcgi.conf 
1a2
> fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

Pour résumer, fastcgi.conf devrait toujours fonctionner. Si, pour une raison quelconque, votre configuration utilise fastcgi_params, vous devez définir SCRIPT_FILENAME:

location ~ \.php$ {
  include snippets/fastcgi-php.conf;

  # With php-fpm (or other unix sockets):
  fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;

  fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
}

Rechargez maintenant la configuration de nginx:

$ Sudo nginx -s reload

Et vérifiez qu'un fichier php est affiché correctement. Par exemple:

/var/www/html/test.php

<pre><?php var_export($_SERVER)?></pre>

/var/www/html est le chemin d'accès à la racine du document.

Si malgré tout, vous voyez toujours un fichier vide, assurez-vous que php.ini a short_open_tag activé (si vous testez une page PHP avec des balises courtes).

32
Diego Pino

Assurez-vous que vous avez cela dans/etc/nginx/fastcgi_params

fastcgi_param SCRIPT_FILENAME $ nom_fichier_demande;

Qui sait pourquoi ce n'est pas déjà là? La quantité de temps que cela doit collectivement perdre!

18
Tim

J'ai écrit un court programme C qui renvoie les variables d'environnement transmises de 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;
}

Enregistrez ceci dans un fichier, par exemple. fcgi_debug.c

Pour le compiler, installez d'abord gcc et libfcgi-dev, puis lancez:

gcc -o fcgi_debug fcgi_debug.c -lfcgi

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

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

Ensuite, modifiez votre configuration nginx fcgi pour pointer vers le programme de débogage:

fastcgi_pass  127.0.0.1:3000;

Redémarrez nginx, actualisez la page et tous les paramètres apparaîtront dans votre navigateur pour vous permettre de déboguer! :-)

14
tudor

Ces astuces m'ont aidé à installer Ubuntu 14.04 LTS,

De plus, je devais activer le short_open_tag dans /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
8
CNSKnight

Ajoutez ceci dans /etc/nginx/conf.d/default.conf:

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
5
nomulex

La raison de ce problème est que les configurations de fastcgi dans nginx ne fonctionnent pas comme prévu et qu’elles ne sont ni en place ni en cours de traitement, elles répondent en tant que données html. Vous pouvez configurer votre nginx de deux manières pour éviter ce problème.

  1. Méthode 1: 

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # With php5-fpm:
                fastcgi_pass unix:/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi.conf;
        }
    
  2. Méthode 2: 

    location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            include snippets/fastcgi-php.conf;
            # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            include fastcgi_params;
    }
    

Les deux méthodes fonctionneraient correctement, vous pouvez aller de l'avant et prendre n'importe laquelle d'entre elles. Ils effectuent presque les mêmes opérations avec très peu de différence.

2

Au cas où quelqu'un aurait ce problème mais aucune des réponses ci-dessus ne résoudrait le problème, j'avais le même problème et j'avais le plus de difficulté à le localiser car mes fichiers de configuration étaient corrects, mes travaux ngnix et php-fpm fonctionnaient correctement aucune erreur ne venait des journaux d'erreurs.

Erreur stupide, mais je n'ai jamais vérifié la variable Short Open Tag dans mon fichier php.ini qui était défini sur short_open_tag = Off. Puisque mes fichiers php utilisaient <? au lieu de <?php, les pages apparaissaient vierges. La balise ouverte courte aurait dû être définie sur On dans mon cas. 

J'espère que ça aide quelqu'un.

2
McLovin

Aucune des réponses ci-dessus n'a fonctionné pour moi - PHP rendait correctement tout le rendu, à l'exception des pages qui s'appuyaient sur mysqli, pour lesquelles il envoyait une page vierge avec un code de réponse de 200 et ne renvoyait aucune erreur. Comme je suis sur OS X, le correctif était tout simplement

Sudo port install php56-mysql

suivi d'un redémarrage de PHP-FPM et de nginx.

J'étais en train de migrer d'une ancienne configuration Apache/PHP vers nginx et je n'ai pas remarqué d'incompatibilité de version dans le pilote pour php-mysql et php-fpm

0
jczaplew
location ~ [^/]\.php(/|$) {
         fastcgi_pass unix:/PATH_TO_YOUR_PHPFPM_SOCKET_FILE/php7.0-fpm.sock;
         include fastcgi_params;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}

Bonne chance

0
gounane

Cela a résolu mon problème:

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include snippets/fastcgi-php.conf;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
}
0

Ceci est mon vhost pour UBUNTU 18.04 + Apache + php7.2

server {
    listen 80;
    server_name test.test;
    root /var/www/html/{DIR_NAME}/public;
    location / {
        try_files $uri /index.php?$args;
    }
location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
}

La dernière ligne le rend différent des autres réponses.

0
Witek Bezgin

J'ai eu un problème similaire, nginx traitait une page à mi-chemin puis s’arrêtait. Aucune des solutions suggérées ici ne fonctionnait pour moi. Je l'ai corrigé en changeant la mise en mémoire tampon de nginx fastcgi:

fastcgi_max_temp_file_size 0;

fastcgi_buffer_size 4K;
fastcgi_buffers 64 4k;

Après les modifications, mon bloc location ressemblait à ceci:

location ~ \.php$ {
    try_files $uri /index.php =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_max_temp_file_size 0;
    fastcgi_buffer_size 4K;
    fastcgi_buffers 64 4k;
    include fastcgi_params;
}

Pour plus de détails, voir https://www.namhuy.net/3120/fix-nginx-upstream-response-buffered-temporary-file-error.html

0
Mugoma J. Okomba

Si vous obtenez un écran vide, cela peut être dû à deux raisons:

  1. Navigateur bloquant l'affichage des cadres. Dans certains navigateurs, les cadres sont considérés comme dangereux. Pour surmonter cela, vous pouvez lancer la version sans cadre de phpPgAdmin en 

    http://-your-domain-name-/intro.php

  2. Vous avez activé une fonctionnalité de sécurité dans Nginx pour X-Frame-Options essayez de la désactiver. 

0
Nahid Ali