Nginx + Php5-fpm no procesa archivos php

8

Pasé horas descubriendo cómo instalar Nginx + Ruby Enterprise Edition + PHP5-fpm y MYSQL, finalmente todo está instalado y todo parece haber comenzado bien.

Pero por alguna razón, los archivos php no se están procesando.

Los archivos .html funcionan bien, pero cuando intento ver un archivo .php, parece que no existe, aunque lo haga. Curiosamente, cuando intento ver un archivo .html que no existe, recibo un buen mensaje Nginx 404, pero cuando veo un archivo .php ni siquiera me da eso.

Entonces, para mi novato, parece que hay algo mal con la configuración o que Nginx y PHP-fpm no están hablando entre sí.

He estado viendo muchos otros ejemplos de archivos de configuración nginx y estoy seguro de que ese lado de las cosas está bien. Bueno ... de todos modos, aquí está la parte relevante del archivo conf:

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

Y

    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;

Cualquier ayuda es muy apreciada.

editar : Aquí están los encabezados que se devuelven del archivo php de prueba " 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
fuente

Respuestas:

10

Creo que me encontré exactamente con el mismo problema hoy, nginx envía la solicitud a php-fpm (como se indica en el encabezado) pero obtienes un 404, a pesar de que el archivo existe y no tiene ningún error (PHP / sintaxis), y no se muestran errores en ningún registro (ngins o php-fpm).

No incluyó su configuración nginx completa, pero ¿es posible que no tenga la opción "root" definir (¿correctamente?) En la sección "servidor"? Debe asegurarse de hacerlo, que apunte a la ubicación correcta de c y que esté dentro de la sección "servidor", no dentro de una "ubicación", por ejemplo:

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
fuente
No estoy seguro, pero ese podría haber sido el problema
Emmanuel
Terminé reconstruyendo el VPS e intentándolo nuevamente usando un tutorial diferente, y ahora está funcionando bien. :)
Emmanuel
Esto funcionó para mí, y estaba usando un socket Unix para el parámetro fastcgi_pass
Sean
1

Si echas un vistazo a los encabezados que responde http://eman.id.au/test.php , verás X-Powered-By: PHP/5.3.2-1ubuntu4.5ppa5~lucid1. No mostraría esto si la solicitud no se pasara a PHP. Además, si PHP no puede encontrar la ruta del archivo que se le pasó, se hará eco del errorNo input file specified.

Dado que su sitio genera el encabezado alimentado por y no tiene el No input file specified.error, la razón más probable es que tiene un error en su script PHP y tiene errores de visualización desactivados. Esto da como resultado una página en blanco y una entrada en su registro de errores, así que eche un vistazo allí y vea si no se está llenando.

Martin Fjordvald
fuente
¡Ah, entonces sí! Estaba viendo la página en Google Chrome y solo me estaba dando un error 404, pero lo acabo de ver en Firefox y es solo una página en blanco. No hay errores en el script php. De hecho, acabo de sacar todo el php y el único contenido es una etiqueta h1
Emmanuel
He actualizado mi publicación original con los encabezados http del archivo test.php
Emmanuel
¿Y está absolutamente seguro de que sus scripts se encuentran en / var / www / eman / y que la ruta y los archivos son legibles y ejecutables mediante el proceso PHP?
Martin Fjordvald
Sí, los scripts están definitivamente en / var / www / eman / el archivo test.php está en el mismo directorio que index.html, que funciona bien. ¿Qué debo verificar para asegurarme de que sean legibles y ejecutables por el proceso PHP? ¿No estoy seguro de eso?
Emmanuel
Bueno, engendras PHP de alguna manera, ya sea a través de spawn-fcgi o php-fpm, el archivo de configuración o el comando utilizado para generar debe contener al usuario del proceso, después de eso tendrás que verificar el permiso de Linux para ese usuario.
Martin Fjordvald
0

Par de pensamientos:

   fastcgi_param SCRIPT_FILENAME /var/www/eman$fastcgi_script_name;

¿Esto necesita una barra extra

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

NGINX también tiene un poco de almacenamiento en caché extraño, así que cuando pruebe la URL en su navegador, agregue un? Random = 12391 al final para forzar una actualización. He estado desconcertado durante 30 minutos por una configuración solo para descubrir que funcionaba todo el tiempo, pero el caché me hizo tropezar.

También es probable que desee escapar un poco mejor de su ubicación (aunque esto no está causando el problema que está teniendo) Es mejor práctica:

location ~ .php$

a

location ~ \.php$

.php $ coincidiría con una solicitud como yourpagephp en lugar de solo yourpage.php

Andrew Taylor
fuente
Bien, he editado los archivos conf, pero todavía no tuve suerte ...
Emmanuel
La URL es: eman.id.au/test.php, eman.id.au funciona bien en index.html
Emmanuel
El almacenamiento en caché no es cierto, Nginx no almacena en caché nada que no le diga específicamente. NO es como Apache, sin embargo, los cambios en el archivo de configuración requieren una recarga del archivo de configuración. Además, su navegador almacenará en caché las solicitudes, por lo que podría confundirlo.
Martin Fjordvald