Aparentemente não sou o único com esse problema, mas depois de tentar todas as soluções sugeridas para alguns que encontrei, aponto que não sei o que fazer.
Estou executando o Ubuntu 16.04, NGinx e PHP-FPM.
O nginx.conf é o padrão, apenas defino um formato de log mais informativo.
Os direitos do usuário parecem estar corretos: NGinx e PHP_FPM são executados no usuário www-data. O proprietário do Document-Root é www-data. O proprietário do FPM-Pool é www-data. O arquivo de soquete está lá e pode ser gravado.
Já tentei definir as permissões de pasta e arquivo para as mais fracas (chmod 777): Sem resultado.
Este é o meu server.conf, como você pode ver nas linhas comentadas, tentei vários truques - sem efeito:
server {
listen 8080;
# listen 8080 default_server;
# listen [::]:8080 default_server;
server_name example.com www.example.com
root /var/www/nginx/;
index index.php;
access_log /var/log/nginx/scripts.log scripts;
gzip on;
gzip_comp_level 3;
gzip_types text/plain text/css application/javascript image/*;
location ~ \.php$ {
if ($uri !~ "^/uploads/") {
fastcgi_pass unix:/run/php/php-fpm-www.sock;
}
include fastcgi.conf;
# include snippets/fastcgi-php.conf;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
# Block access to .htaccess
location ~ \.htaccess {
deny all;
}
}
Essa é a configuração do fpm-pool:
[www]
listen = /run/php/php-fpm-$pool.sock
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data
php_admin_flag[allow_url_fopen] = off
php_admin_flag[allow_url_include] = off
php_admin_value[memory_limit] = 128M
pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
chroot = /var/www/nginx/
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
catch_workers_output = yes
Esta é a saída do access.log do nginx:
/var/www/nginx/index.php > GET /index.php HTTP/1.1
E esse é o erro real.log:
2018/08/29 17:34:27 [error] 24020#24020: *47 FastCGI sent in stderr: "Unable to open primary script: /var/www/nginx/index.php (No such file or directory)" while reading response header from upstream, client: 213.61.37.18, server: example.com, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php-fpm-www.sock:", host: "example.com:8080"
Responder1
Eu mesmo encontrei o erro após a dica de @michael - obrigado pela iluminação.
Estou usando o chroot, porque o objetivo é "prender" cada site por conta própriaambiente/ pasta. Então eu defini a raiz deste particularambientepara o local real do sistema de arquivos/var/www/nginx.
Dentro da configuração do servidor NGinx eu passo o parâmetro fastcgi SCRIPT_FILENAME com $document_root inicial.
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
No NGinx, $document_root faz referência à diretiva root. O $document_root é, claro/var/www/nginx
Mas o PHP-ambientetem uma "raiz alterada" (/ significa /var/www/nginx). Isso significa que o PHP agora está procurando index.php na pasta /var/www/nginx. Mas como a pasta raiz é apenas "virtual", o /var/www/nginx do PHP na verdade aponta para este local no sistema de arquivos real: /var/www/nginx/var/www/nginx.
Portanto, alterar o parâmetro para isso corrigirá o erro.
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;