nginx com php-fpm baixando arquivos php em vez de executá-los no mac os x (ambiente local)

nginx com php-fpm baixando arquivos php em vez de executá-los no mac os x (ambiente local)

Estou tendo problemas para executar arquivos PHP em minha máquina de desenvolvimento local. Parece que instalei com sucessonginxephp-fpmtambém parece estar instalado e funcionando corretamente, mas não consigo entender por que os arquivos PHP estão sendo baixados em vez de executados.

Depois de muitas e muitas horas defrustração, achei melhor perguntar a alguém que talvez já tenha feito isso antes! Fiz o meu melhor para fornecer todas as informações, mas se houver algo que possa ser útil ou que eu tenha perdido,Por favor não hesite em perguntarnos comentários.

Observe:Leia atentamente sobre o problema que estou tendo. Digo isso porque li quase todos os artigos possíveis relacionados a esse problema que o Google pode me fornecer e tentei várias maneiras, correções, sugestões, reinstalações, configurações, etc. corrigir ou até mesmo depurar o problema que estou enfrentando. Em outras palavras, esta definitivamente não é uma pergunta duplicada. Passei algumas horas lendo para ter certeza!

Eu instalei com sucessonginxephp-fpmusando https://github.com/josegonzalez/homebrew-php. O bom e velho confiável brew doctorconfirma que tudo está atualizado e que tenho tudo o que é necessário instalado (XQuartz, ferramentas de linha de comando Xcode, etc).

Aqui estão alguns trechos de arquivos que podem ser úteis ao tentar entender minha configuração:

registro 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

Por favor, corrija-me se eu estiver errado, mas isso parece mostrar que o php-fpm está funcionando corretamente

a única mudança no meu arquivo de configuração php-fpm

/usr/local/etc/php/5.4/php-fpm.conf da linha 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

A razão pela qual mudei isso myusername:staffé porque é assim que o user:group é definido em meu ~diretório. Isso pode ser parte do problema, não tenho certeza.

De fato, me deparei com todos os problemas usuais de permissão de arquivo e posso confirmar que todos os meus arquivos em /clients/mywebsite/local corrigiram isso usando chown -R myusername:staff ./e chmod -R 0755 ./. Com isso em mente, esperamos que isso não seja um problema de permissão.

arquivo de configuração 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;
    #    }
    #}

}

As únicas partes que alterei do arquivo original localizado em /usr/local/etc/nginx/nginx.conf.default foram adicionar index.php ao location / {bloco e descomentei o location ~ \.php$ {bloco para permitir o processamento php-fpm para .phparquivos

Também vale a pena mencionar que criei um /usr/local/etc/nginx/conf.d/mywebsite.confarquivo e adicionei 127.0.0.1 mywebsite.localao meu arquivo hosts que me permite acessar arquivos http://mywebsite.local.

O Nginx parece estar configurado corretamente, pois posso acessar http://mywebsite.local/test.htmlabsolutamente todos os arquivos da minha /clients/mywebsite/local/web/test.htmlpasta, mas para arquivos PHP, a história é diferente. Eles são baixados apenas pelo navegador como um arquivo PHP e não são executados.

arquivo de configuração do meu site

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

Presumo que todas as partes aqui serão substituídas http://mywebsite.locale tudo o que não estiver aqui será retirado do /usr/local/etc/nginx/nginx.confarquivo normal.

Também vale a pena dizer que meu /usr/local/var/log/nginx/error.logarquivo não está retornando nenhum erro. Cada vez que faço uma alteração nos .confarquivos, reinicio o nginx usando o comando sudo nginx -s reloade posso confirmar php-fpmse nginxos processos estão em execução.

Também li sobre como mudar 127.0.0.1:9000para /var/run/php5-fpm/php5-fpm.socko que não parece estar na minha configuração. Eu tentei usar findaté mesmo ackpara procurar sua existência, mas não está na minha máquina. Também li sobre como alterar essa porta para algo diferente do :9000que já está sendo usado. Como esta é minha primeira instalação, tenho certeza de que não é o caso, mas como eu testaria isso?

Também li sobre outro arquivo localizado, /usr/share/nginx/htmlmas novamente ele não existe.

Bem, você leu até aqui, então obrigado! Se você puder ajudar de alguma forma, eu realmente aprecio seu tempo fazendo isso.

Responder1

Em vez de especificar a seção PHP no arquivo nginx.conf, você pode especificar um local de servidor no arquivo padrão (dentro do diretório de sites disponíveis) e recarregar ou reiniciar o 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;
        }
}

Além disso, certifique-se de que seu arquivo nginx.conf tenha a seguinte diretiva:

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

Responder2

Acho que o problema é que você não tem um upstream para informar ao nginx para onde enviar os arquivos php, algo assim no seu bloco http:

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

onde unix:/var/run/php-fpm.socketdeve ser indicado na diretiva listen do php config.

Aliás: não é uma boa prática terroot dentro de um bloco de localizaçãonemmúltiplas diretivas de índice.

informação relacionada