Nginx + Php5-fpm não processando arquivos php

8

Passei horas descobrindo como instalar o Nginx + Ruby Enterprise Edition + PHP5-fpm e MYSQL, finalmente tudo está instalado e tudo parece ter começado bem.

Mas, por algum motivo, os arquivos php não estão sendo processados.

Os arquivos .html funcionam bem, mas quando tento visualizar um arquivo .php, parece que ele não existe, mesmo que exista. Curiosamente, quando tento visualizar um arquivo .html que não existe, recebo uma boa mensagem do Nginx 404, mas quando visualizo um arquivo .php, ele nem me dá isso.

Então, para meu entendimento iniciante, parece que há algo errado com a configuração ou o Nginx e o PHP-fpm não estão falando um com o outro.

Eu estive analisando muitos outros exemplos de arquivos de configuração do nginx e tenho certeza de que tudo está bem. Bem ... aqui está a parte relevante do arquivo 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;
 }

E

    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;

Qualquer ajuda é muito apreciada.

edit : Aqui estão os cabeçalhos retornados do arquivo php de teste " 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
fonte

Respostas:

10

Acredito que encontrei exatamente o mesmo problema hoje, o nginx envia a solicitação para php-fpm (como indicado no cabeçalho) e você recebe um 404, mesmo que o arquivo exista e não tenha nenhum erro (sintaxe / PHP), e nenhum erro aparece em nenhum log (ngins ou php-fpm).

Você não incluiu sua configuração completa do nginx, mas é possível que você não tenha a opção "root" definida (corretamente?) Na seção "server"? Você precisa ter certeza de que aponta para o local certo dec e está dentro da seção "servidor", não dentro da seção "local" - por exemplo:

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
fonte
Não tenho certeza, mas esse poderia ter sido o problema
Emmanuel
Acabei reconstruindo o VPS e tentando novamente usando um tutorial diferente, e agora está funcionando bem. :)
Emmanuel
Isso funcionou para mim, e eu estava usando um socket unix para o parâmetro fastcgi_pass
Sean
1

Se você der uma olhada nos cabeçalhos, http://eman.id.au/test.php responde e você verá X-Powered-By: PHP/5.3.2-1ubuntu4.5ppa5~lucid1. Não mostraria isso se a solicitação não fosse passada para o PHP. Além disso, se o PHP não conseguir encontrar o caminho do arquivo passado, ele repetirá o erroNo input file specified.

Como o site gera o cabeçalho powered by e não possui o No input file specified.erro, o motivo mais provável é que você possui um erro no script PHP e os erros de exibição estão desativados. Isso resulta em uma página em branco e uma entrada no seu log de erros; portanto, dê uma olhada e verifique se não está sendo preenchido.

Martin Fjordvald
fonte
Ah, é verdade !! Eu estava vendo a página no google chrome e estava apenas me dando um erro 404, mas acabei de visualizá-la no firefox e é apenas uma página em branco. Não há erros no script php. Na verdade Acabei de tomar todos php fora dele e o único conteúdo é uma tag h1
Emmanuel
Atualizei minha postagem original com os cabeçalhos http do arquivo test.php
Emmanuel
E você está absolutamente certo de que seus scripts estão localizados em / var / www / eman / e que o caminho e os arquivos são legíveis e executáveis ​​pelo processo PHP?
Martin Fjordvald
Sim, eles são os scripts que estão definitivamente em / var / www / eman / e o arquivo test.php está no mesmo diretório do index.html, que funciona bem. O que devo verificar para garantir que sejam legíveis e executáveis ​​pelo processo PHP ??? Não tenho certeza sobre isso?
Emmanuel
Bem, você gera o PHP de alguma forma via spawn-fcgi ou php-fpm, o arquivo de configuração ou o comando usado para gerar deve conter o usuário do processo, depois disso você terá que verificar a permissão linux para esse usuário.
Martin Fjordvald
0

Par de pensamentos:

   fastcgi_param SCRIPT_FILENAME /var/www/eman$fastcgi_script_name;

Isso precisa de uma barra extra

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

O NGINX também possui um pouco de cache estranho; portanto, quando você tentar o URL no seu navegador, adicione um? Random = 12391 ao final para forçar uma atualização. Fiquei intrigado por 30 minutos em uma configuração apenas para descobrir que estava funcionando o tempo todo, mas estava sendo tropeçado pelo cache.

Você provavelmente também deseja escapar um pouco melhor da sua localização (embora isso não esteja causando o problema que você está tendo). É uma prática melhor:

location ~ .php$

para

location ~ \.php$

.php $ corresponderia a uma solicitação como yourpagephp em vez de apenas yourpage.php

Andrew Taylor
fonte
Certo, eu editei os arquivos conf, mas ainda não tive sorte ...
Emmanuel
A URL é: eman.id.au/test.php, o próprio eman.id.au funciona bem em index.html
Emmanuel
A coisa do cache não é verdadeira, o Nginx não armazena em cache nada que você não solicite especificamente. NÃO é como o Apache, no entanto, altera o arquivo de configuração requer uma recarga do arquivo de configuração. Além disso, seu navegador armazenará solicitações em cache, e é com isso que você pode estar confundindo.
Martin Fjordvald