Nginx + php5-fpm = “Arquivo não encontrado”

13

Eu bati em uma parede enquanto configurava um site usando nginx / fpm. A página exibe "Arquivo não encontrado" e aparece no nginx error.log:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

Sou novo no nginx e no fpm, e essa mensagem de erro não significa nada para mim (até mesmo a máquina do google não ajudou!). Alguém pode lançar alguma luz sobre o que poderia estar acontecendo?

    
por Mathew 09.07.2012 / 21:19

7 respostas

18

Você deve ter uma seção location para lidar com solicitações PHP configuradas de forma semelhante a esta:

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include         fastcgi_params;
    }

(O extra try_files resolve uma vulnerabilidade de segurança que pode permitir que arquivos arbitrários sejam executado como PHP.)

Além disso, seu root deve ser definido na seção server do arquivo de configuração, não na seção location . Este é um dos mais comuns erros de configuração do nginx .

    
por 09.07.2012 / 22:00
2

Esta é uma nota para instalações de passageiros.

Acabei de instalar o nginx da fonte via passageiro, o que causou um problema com o php5-fpm. O nginx.conf padrão faz uso do problema descrito por Michael Hampton. A solução é remover o bloco em torno das diretivas raiz e índice, portanto:

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

torna-se:

root html
index index.html index.htm

Além disso, o bloco php está configurado incorretamente. Veja Michael Hamptons responder pela maneira correta disso.

Uma observação adicional pode ser que, se o php5-fpm estiver configurado para usar sockets, aponte o parâmetro fastcgi_pass no bloco php em nginx.conf para a configuração do socket em /etc/php5/fpm/pool.d/www.conf .

    
por 10.04.2013 / 13:49
2

Acabei de ter este problema em uma nova versão do nginx. (configuração retirada de uma versão anterior)

O que eu tive que fazer foi colocar o include fastcgi_params; acima do meu SCRIPT_FILENAME personalizado como este:

location @web {
        try_files $uri =404;
        include         fastcgi_params;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_param   SCRIPT_FILENAME  $document_root/index.php;
}

Como o SCRIPT_FILENAME estava sendo sobrescrito.

    
por 06.05.2014 / 08:24
1

Se você estiver usando aliases nos seus blocos de localização, um erro 404 não processado também poderá exibir esse comportamento. Você pode ver isso se a página exibida no navegador for o texto simples "Arquivo não encontrado", em oposição à página 404 nginx formatada (centralizada) mais bonita. Essencialmente, está realmente dizendo que a página 404 não pode ser encontrada.

Para resolver, adicione uma linha try_files $uri =404 adicional no seu bloco de localização e recarregue a configuração do nginx. Além do que Michael Hampton disse sobre resolvendo uma vulnerabilidade de segurança específica , isso também permite que o manipulador fastcgi substitua a definição do alias e encontre o script 404 no local padrão.

    
por 24.03.2016 / 17:16
1
sudo vim /etc/php-fpm.conf

sobre a linha 149, altere o usuário do php & & grupo de usuários

Eu testei com sucesso agora.

    
por 13.01.2017 / 02:55
0

Eu vi:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

em um servidor eu coloquei sob alta carga quando o teste de estresse. Minha suspeita, ainda a ser confirmada, é que as alças de arquivos disponíveis no sistema operacional estavam esgotadas. Nesse caso, o php-fpm não pode obter uma referência ao arquivo.

Eu percebo que isso é especulativo, mas certamente se encaixa no meu cenário e também pode ajudar outra pessoa.

    
por 27.04.2013 / 00:56
0

Thanks @homeway, Your answer inspire me. Thank you very much!

I meet the same question, But Other method didn't help me resolve the question!

I resolve it, I find the key is that: Linux User Right lead to the question: FastCGI sent in stderr: "Primary script unknown"

Because The PHP-FPM default user:group is apache:apache, But your code dir is someBody:someBody. So you should change the User right!

I write a blog to resolve this question, You can see this blog:

[Nginx FastCGI sent in stderr: "Primary script unknown"][1] ' [1]: http://geekhades.blogspot.com/2017/06/nginx-fastcgi-sent-in-stderr-primary.html

    
por 01.06.2017 / 10:26