Nginx + php5-fpm = "Arquivo não encontrado"

14

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

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

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

Mathew
fonte
Você poderia adicionar a parte da sua configuração nginx onde define o tratamento do PHP?
Christopher Perrin
Para mim, o seguinte artigo ajudou: nginxlibrary.com/resolving-no-input-file-specified-error . Geralmente esse erro ocorre se houver um problema com o SCRIPT_FILENAME.
precisa saber é o seguinte

Respostas:

18

Você deve ter uma locationseção para lidar com solicitações PHP configuradas de maneira 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_filesresolve uma vulnerabilidade de segurança que pode permitir que arquivos arbitrários sejam executados como PHP.)

Além disso, você rootdeve ser definido na serverseção do arquivo de configuração, não na locationseção. Essa é uma das configurações mais comuns do nginx .

Michael Hampton
fonte
+1 para o artigo sobre configurações incorretas - realmente vale a pena ler, principalmente se você estiver aprendendo Nginx. Bem escrito, de nível básico, com várias ótimas dicas!
Ben
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 utiliza o problema descrito por Michael Hampton. A solução é remover o blok das diretivas raiz e de í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 a resposta de Michael Hamptons da maneira correta.

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 no nginx.conf para a configuração do soquete em /etc/php5/fpm/pool.d/www.conf.

Kenneth
fonte
2

Eu apenas tive esse problema em uma nova versão do nginx. (configuração retirada de uma versão mais antiga)

O que eu tinha que fazer era colocar include fastcgi_params;acima o meu costume SCRIPT_FILENAMEassim:

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_FILENAMEestava sendo substituído.

complistic
fonte
1

Se você estiver usando aliases em seus blocos de localização, um erro 404 não tratado também pode 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 nginx 404 mais formatada (mais centralizada). Essencialmente, está realmente dizendo que a página 404 não pode ser encontrada.

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

radiumsoup
fonte
1
sudo vim /etc/php-fpm.conf

sobre a linha 149, alterar usuário php e grupo de usuários

Eu testei com sucesso agora.

caminho de casa
fonte
Esta é a maneira certa! Ei cara, você pode tentar!
Love
Quando você alterar o usuário e grupo, você não se esqueça de reiniciar php-fpm.If você usa centos6 você pode usar este comando: sudo serviço php-fpm restart
Amor
0

Eu tenho visto :

FastCGI enviado no stderr: "Script primário desconhecido" ao ler o cabeçalho de resposta do upstream

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

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

Ian Lewis
fonte
0

Obrigado @homeway, Sua resposta me inspira. Muito obrigado!

Encontro a mesma pergunta, mas Outro método não me ajudou a resolver a questão!

Eu resolvo isso, acho que a chave é que: Usuário Linux Linux Direito levar à pergunta: FastCGI enviado no stderr: "Script primário desconhecido"

Porque o usuário padrão do PHP-FPM: group é apache: apache, mas seu diretório de código é someBody: someBody. Então você deve mudar o usuário certo!

Eu escrevo um blog para resolver esta pergunta. Você pode ver este blog:

[Nginx FastCGI enviado no stderr: "Script primário desconhecido"] [1] `[1]: http://geekhades.blogspot.com/2017/06/nginx-fastcgi-sent-in-stderr-primary.html

Ame
fonte