FastCGI: Não é possível abrir o script principal no NGinx e no PHP-FPM

1

Eu aparentemente não sou o único com esse problema, mas depois de tentar todas as soluções sugeridas para o casal que cheguei, apontei para onde não sei o que fazer.

Estou executando o Ubuntu 16.04, o NGinx e o PHP-FPM.

O nginx.conf é o padrão, eu só configuro um formato de log mais informativo.

Os direitos do usuário parecem estar bem: NGinx e PHP_FPM são executados sob o usuário www-data. O proprietário da raiz de documentos é www-data. O proprietário do FPM-Pool é www-data. O arquivo de soquete está lá e é gravável.

Eu já tentei configurar permissões de pastas e arquivos para os mais fracos (chmod 777): Nenhum resultado.

Este é o meu server.conf, como você pode ver nas linhas comentadas, eu tentei um monte de 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 nginx 'access.log:

/var/www/nginx/index.php > GET /index.php HTTP/1.1

E esse é o verdadeiro error.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"
    
por n.r. 29.08.2018 / 17:48

1 resposta

1

Eu encontrei o erro para mim depois da sugestão de @michael - obrigado pela iluminação.

Estou usando o chroot, porque o objetivo é "prender" todos os sites em sua própria pasta environment /. Então eu configurei a raiz desse ambiente para a localização real do sistema de arquivos / var / www / nginx .

Dentro da configuração do servidor do NGinx eu passo o parâmetro fastcgi SCRIPT_FILENAME com um $ document_root inicial.

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

No NGinx $ document_root faz referência à diretiva raiz. O $ document_root é, obviamente, / var / www / nginx

Mas o ambiente PHP- tem uma "raiz alterada" (/ significa / var / www / nginx). Isso significa que o PHP agora está procurando por index.php na pasta / var / www / nginx. Mas como a pasta raiz é apenas "virtual", o / var / www / nginx do PHP aponta para esse local no sistema de arquivos real: / var / www / nginx / var / www / nginx.

Portanto, alterar o parâmetro para isso consertará o erro.

fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    
por 30.08.2018 / 11:23