nginx que muestra páginas PHP en blanco


Answers

reemplazar

include fastcgi_params;

con

include fastcgi.conf;

y elimine fastcgi_param SCRIPT_FILENAME ... en nginx.conf

Question

Configuré un servidor nginx con php5-fpm. Cuando intento cargar el sitio, aparece una página en blanco sin errores. Las páginas HTML se publican bien, pero no php. Intenté encender display_errors en php.ini pero no tuve suerte. php5-fpm.log no está produciendo ningún error y tampoco es nginx.

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;
    }
}

EDITAR

aquí está mi registro de error 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"



Escribí un programa corto en C que devuelve las variables de entorno pasadas de nginx a la aplicación 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;
}

Guarde esto en un archivo, por ejemplo, fcgi_debug.c

Para compilarlo, primero instala gcc y libfcgi-dev , luego ejecuta:

gcc -o fcgi_debug fcgi_debug.c -lfcgi

Para ejecutarlo, instale spawn-fcgi , luego ejecute:

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

Luego, cambie la configuración de nginx fcgi para que apunte al programa de depuración:

fastcgi_pass  127.0.0.1:3000;

Reinicie nginx, actualice la página y verá todos los parámetros en su navegador para que pueda depurarlos. :-)




La razón por la que ocurre este problema es porque las configuraciones de fastcgi en nginx no funcionan como se requiere y están en su lugar o procesando, responden como datos html. Hay dos formas posibles en que puede configurar su nginx para evitar este problema.

  1. Método 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étodo 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;
    }
    

Ambos métodos funcionarían correctamente, puedes seguir y tomar uno de ellos. Casi realizan las mismas operaciones con muy poca diferencia.




Muchos usuarios caen en este hilo esperando encontrar una solución para las páginas en blanco que se muestran al usar nginx + php5-fpm , siendo yo uno de ellos. Este es un resumen de lo que terminé haciendo después de leer muchas de las respuestas aquí más mis propias investigaciones:

1) Abra /etc/php5/fpm/pool.d/www.conf y verifique el valor de la location del parámetro.

location = /var/run/php5-fpm.sock

2) La location parámetro debe coincidir fastcgi_pass parámetro fastcgi_pass en su archivo nginx.conf .

fastcgi_pass unix:/var/run/php5-fpm.sock;

3) Verifique que el archivo realmente exista:

$ file /var/run/php5-fpm.sock
/var/run/php5-fpm.sock: socket

4) Si no existe, significa que php5-fpm no se está ejecutando, por lo que debe reiniciarlo:

$ sudo /etc/init.d/php5-fpm restart
[ ok ] Restarting php5-fpm (via systemctl): php5-fpm.service.


Con respecto a la sección de location :

location ~ \.php$ {
    include fastcgi_params;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
}

Comprueba que el archivo fastcgi_params existe en la ubicación /etc/nginx/ :

$ file /etc/nginx/fastcgi_params 
/etc/nginx/fastcgi_params: ASCII text

En general, este archivo contiene una lista de definiciones de variables requeridas por php5-fpm:

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

nginx incluye dos posibles archivos de parámetros: fastcgi_params y fastcgi.conf . La diferencia entre ambos es la definición de la variable SCRIPT_FILENAME :

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

Para abreviar, fastcgi.conf siempre debería funcionar. Si por algún motivo está utilizando fastcgi_params , debe definir SCRIPT_FILENAME :

location ~ \.php$ {
    include fastcgi_params;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
}

Ahora recarga la configuración de nginx:

$ sudo nginx -s reload

Y compruebe que un archivo php se muestra correctamente. Por ejemplo:

/var/www/html/test.php

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

Donde /var/www/html es la ruta a la raíz del documento.




Agregue esto en /etc/nginx/conf.d/default.conf :

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;



Ninguna de las respuestas anteriores funcionó para mí: PHP estaba procesando todo, excepto las páginas que dependían de mysqli, para lo cual enviaba una página en blanco con un código de respuesta de 200 y no arrojaba ningún error. Como estoy en OS X, la solución fue simplemente

sudo port install php56-mysql

seguido de un reinicio de PHP-FPM y nginx.

Estaba migrando de una configuración anterior de Apache / PHP a nginx, y no me di cuenta de que la versión no coincide en el controlador para php-mysql y php-fpm .




Esto se solucionó mi problema

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;
}



Links



Tags

nginx   php php