nginx con php-fpm descarga archivos php en lugar de ejecutarlos en mac os x (entorno local)

nginx con php-fpm descarga archivos php en lugar de ejecutarlos en mac os x (entorno local)

Tengo problemas para ejecutar archivos PHP en mi máquina de desarrollo local. Parece que lo he instalado exitosamentenginxyphp-fpmTambién parece estar correctamente instalado y ejecutándose, pero no puedo entender por qué los archivos PHP se descargan en lugar de ejecutarse.

Después de muchas, muchas horas defrustración¡Pensé que sería mejor preguntarle a alguien que tal vez hubiera hecho esto antes! He hecho todo lo posible para brindar toda la información, pero si hay algo que pueda ser útil o que me haya perdido,por favor no dudes en preguntaren los comentarios.

Tenga en cuenta:Lea atentamente sobre el problema que tengo. La razón por la que digo esto es porque he leído casi todos los artículos posibles relacionados con este problema que Google puede brindarme y he probado varias formas diferentes, correcciones, sugerencias, reinstalaciones, configuraciones, etc. Ninguno de ellos ha podido ayudar. solucionar o incluso depurar el problema que estoy experimentando. En otras palabras, esta definitivamente no es una pregunta duplicada. ¡He pasado algunas horas leyendo para asegurarme!

Lo he instalado exitosamentenginxyphp-fpmusando https://github.com/josegonzalez/homebrew-php. El buen y confiable brew doctorconfirma que todo está actualizado y que tengo todo lo necesario instalado (XQuartz, herramientas de línea de comandos Xcode, etc.).

A continuación se muestran algunos extractos de archivos que pueden resultar útiles al intentar comprender mi configuración:

registro de php-fpm

tail -f /usr/local/var/log/php-fpm.log

[24-Dec-2013 00:05:59] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[24-Dec-2013 00:05:59] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
[24-Dec-2013 00:05:59] NOTICE: fpm is running, pid 31745
[24-Dec-2013 00:05:59] NOTICE: ready to handle connections

Corríjame si me equivoco, pero esto parece mostrar que php-fpm se está ejecutando correctamente.

el único cambio en mi archivo de configuración php-fpm

/usr/local/etc/php/5.4/php-fpm.conf de la línea 145

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = myusername
group = staff

La razón por la que he cambiado esto myusername:staffes porque así es como se configura usuario:grupo en mi ~directorio. Esto puede ser parte del problema, no estoy seguro.

De hecho, me he encontrado con todos los problemas habituales de permisos de archivos y puedo confirmar que todos mis archivos dentro de /clients/mywebsite/local han solucionado este problema usando chown -R myusername:staff ./y chmod -R 0755 ./. Teniendo esto en cuenta, con suerte, esto no debería ser un problema de permisos.

archivo de configuración nginx

/usr/local/etc/nginx/nginx.config

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.php index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;

    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers   on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

Las únicas partes que he cambiado del archivo original ubicado en /usr/local/etc/nginx/nginx.conf.default es agregar index.php al location / {bloque y descomentar el location ~ \.php$ {bloque para permitir el procesamiento php-fpm de .phplos archivos.

También vale la pena mencionar que creé un /usr/local/etc/nginx/conf.d/mywebsite.confarchivo y lo agregué 127.0.0.1 mywebsite.locala mi archivo de hosts que me permite acceder http://mywebsite.local.

Nginx parece estar configurado correctamente ya que puedo acceder a http://mywebsite.local/test.htmltodos los archivos de mi /clients/mywebsite/local/web/test.htmlcarpeta, pero para los archivos PHP, esta es una historia diferente. El navegador simplemente los descarga como un archivo PHP, no se ejecutan en absoluto.

archivo de configuración de mi sitio web

/usr/local/etc/nginx/conf.d/mywebsite.conf

server {
    listen   80;
    listen   [::]:80 default ipv6only=on;
    server_name  mywebsite.local;

    location / {
        root   /clients/mywebsite/local/web;
        index  index.php index.html index.htm;
    }

    # redirect server error pages to the static page /50x.html
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

Supongo que se sobrescribirán todas las partes aquí http://mywebsite.localy que todo lo que no esté aquí se tomará del /usr/local/etc/nginx/nginx.confarchivo normal.

También vale la pena decir que mi /usr/local/var/log/nginx/error.logarchivo no devuelve ningún error. Cada vez que hago un cambio en los .confarchivos, reinicio nginx usando el comando sudo nginx -s reloady puedo confirmar php-fpmque nginxlos procesos se están ejecutando.

También leí sobre cambiar 127.0.0.1:9000a /var/run/php5-fpm/php5-fpm.socklo que no parece estar en mi configuración. Intenté usar findincluso usar ackpara buscar su existencia pero no está en mi máquina. También leí acerca de cambiar este puerto a otro que no sea :9000si ya se está utilizando. Como esta es mi primera instalación, estoy bastante seguro de que este no es el caso, pero ¿cómo haría para probarlo?

También leí sobre otro archivo ubicado en /usr/share/nginx/htmlpero nuevamente este no existe.

Bueno, has leído hasta aquí, ¡así que gracias! Si puedes ayudar de alguna manera, realmente aprecio tu tiempo para hacerlo.

Respuesta1

En lugar de especificar la sección PHP en el archivo nginx.conf, ¿puede especificar una ubicación del servidor en el archivo predeterminado (dentro del directorio de sitios disponibles) y recargar o reiniciar nginx?

server { 
        listen 80;
        listen [::]:820; #ipv6only=on;
        root /var/www/;  ##assuming your PHP application is in /var/www/
        index index.php index.html index.htm;
        server_name PHPApp;

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

Además, asegúrese de que su archivo nginx.conf tenga la siguiente directiva:

include /etc/nginx/sites-enabled/*;

Respuesta2

Creo que el problema es que no tienes un upstream para decirle a nginx dónde enviar archivos php, algo como esto en tu bloque http:

upstream php {
    server unix:/var/run/php-fpm.socket;
}

donde unix:/var/run/php-fpm.socketse debe indicar en la directiva listening de php config.

Por cierto: no es una buena práctica tenerraíz dentro de un bloque de ubicaciónnimúltiples directivas de índice.

información relacionada