Não é sempre que SCRIPT_FILENAME
esteja errado.
Também pode ser que o PHP esteja sendo executado como usuário / grupo errado .
Este exemplo é específico do Mac OS X , que na minha experiência é o mais problemático para configurar (o Debian é fácil em comparação) - Acabei de atualizar do PHP 5.6 para 7.0, usando < href="http://brew.sh/"> homebrew e os excelentes pacotes josegonzalez.
O problema é que uma nova cópia dos arquivos de configuração foi criada.
O arquivo de configuração principal é /usr/local/etc/php/7.0/php-fpm.conf
, mas observe a seção Definições de pool no final, onde ele inclui um subdiretório inteiro.
include=/usr/local/etc/php/7.0/php-fpm.d/*.conf
Em php-fpm.d
, há um arquivo www.conf
. Por padrão, isso tem:
user = _www
group = _www
No OS X, pode ser necessário alterar isso para:
user = [your username]
group = staff
(você deve descobrir que isso corresponde a ls -lh
do seu document_root)
Infelizmente, sem essa alteração, você ainda verá isso no seu registro de erros Nginx , mesmo que esteja procurando o arquivo no lugar correto .
"Primary script unknown" while reading response header from upstream
Verifique o que está sendo executado no momento:
ps aux | grep 'php-fpm'
ou mais claramente:
ps aux | grep -v root | grep php-fpm | cut -d\ -f1 | sort | uniq
Como verificar se o nome do arquivo de script está correto:
(roubado de igorsantos07 na outra resposta)
Adicione ao bloco http
do principal /usr/local/etc/nginx/nginx.conf
:
log_format scripts '$document_root$fastcgi_script_name > $request';
(onde o primeiro bit precisa ser o que você está usando no momento, para que você possa ver se está certo.)
E para usar o registro que você acabou de definir, no server
block do seu site:
access_log /var/log/nginx/scripts.log scripts;
Se estiver correto, solicitar example.com/phpinfo.php produzirá algo parecido com isto:
/path/to/docroot/phpinfo.php > GET /phpinfo.php
Você pode simplificar sua configuração existente?
Você está usando um bloco location ~ \.php {
copiado / colado de algum lugar fora da Internet? A maioria dos pacotes permite que você faça isso de maneira mais rápida e limpa. por exemplo. no OS X, você só precisa disso:
location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
include snippets/fastcgi-php.conf;
# any site specific settings, e.g. environment variables
}
Coisas como fastcgi_split_path_info, try_files e fastcgi_index (o padrão é index.php) estão em /usr/local/etc/nginx/snippets/fastcgi-php.conf
.
Isso, por sua vez, inclui /usr/local/etc/nginx/fastcgi.conf
, que é uma lista de fastcgi_param
configurações, incluindo o crucial SCRIPT_FILENAME.
Nunca duplique root
no bloco de localização do PHP.