Muchos usuarios caen en este hilo esperando encontrar una solución para las páginas en blanco que se muestran mientras usan nginx + php-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 (actualizado a php7.2):
1) Abrir /etc/php/7.2/fpm/pool.d/www.conf
y verificar el valor del parámetro listen
.
listen = /var/run/php/php7.2-fpm.sock
2) El parámetro listen
debe coincidir con el fastcgi_pass
parámetro en el archivo de configuración de su sitio (i, e:) /etc/nginx/sites-enabled/default
.
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
3) Verifique que el archivo realmente exista:
$ file /var/run/php/php7.2-fpm.sock
/var/run/php/php7.2-fpm.sock: socket
4) Si no existe, significa que php7.2-fpm no se está ejecutando, por lo que debe reiniciarlo:
$ sudo /etc/init.d/php7.2-fpm restart
[ ok ] Restarting php7.2-fpm (via systemctl): php7.2-fpm.service.
Con respecto a la location
sección en /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;
}
Compruebe que el archivo snippets/fastcgi-php.conf
existe en la ubicación /etc/nginx/
:
$ file /etc/nginx/snippets/fastcgi-php.conf
/etc/nginx/snippets/fastcgi-php.conf: ASCII text
Este archivo contiene una lista de definiciones de variables requeridas por php7.2-fpm. Las variables se definen directamente o mediante la inclusión de un archivo separado.
include fastcgi.conf;
Este archivo se encuentra en /etc/nginx/fastcgi.conf
y se ve así:
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 variable SCRIPT_FILENAME
:
$ diff fastcgi_params fastcgi.conf
1a2
> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Para resumir , fastcgi.conf siempre debería funcionar. Si por alguna razón que está configurado está usando fastcgi_params , debe definir 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;
}
Ahora vuelva a cargar la configuración de nginx:
$ sudo nginx -s reload
Y verifique que un archivo php se muestre correctamente. Por ejemplo:
/var/www/html/test.php
<pre><?php var_export($_SERVER)?></pre>
¿Dónde /var/www/html
está la ruta a la raíz del documento?
Si a pesar de todo, todavía se está viendo un archivo en blanco, asegúrese de que php.ini
ha short_open_tag
activado (si se está probando una página PHP con las etiquetas cortas).