FastCGI: No se puede abrir el script principal en NGinx y PHP-FPM

FastCGI: No se puede abrir el script principal en NGinx y PHP-FPM

Aparentemente no soy el único con este problema, pero después de probar todas las soluciones sugeridas para parejas, llegué a un punto en el que no sé qué hacer.

Estoy ejecutando Ubuntu 16.04, NGinx y PHP-FPM.

nginx.conf es el predeterminado, solo configuro un formato de registro más informativo.

Los derechos de usuario parecen estar bien: NGinx y PHP_FPM se ejecutan bajo el usuario www-data. El propietario de Document-Root es www-data. El propietario de FPM-Pool es www-data. El archivo de socket está ahí y se puede escribir.

Ya intenté configurar los permisos de carpetas y archivos en los más débiles (chmod 777): Sin resultado.

Este es mi server.conf, como puedes ver en las líneas comentadas, probé un montón de trucos, sin ningún efecto:

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;
    }

}    

Esa es la configuración de 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

Este es el resultado del access.log de nginx:

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

Y ese es el error.log real:

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"

Respuesta1

Encontré el error por mí mismo después de la sugerencia de @michael: gracias por la iluminación.

Estoy usando chroot porque el objetivo es "encarcelar" cada sitio web por su cuenta.ambiente/ carpeta. Así que puse la raíz de este particularambientea la ubicación real del sistema de archivos/var/www/nginx.

Dentro de la configuración del servidor de NGinx paso el parámetro fastcgi SCRIPT_FILENAME con $document_root inicial.

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

En NGinx $document_root hace referencia a la directiva raíz. El $document_root es, por supuesto/var/www/nginx

Pero el PHP-ambientetiene una "raíz modificada" (/ significa /var/www/nginx). Eso significa que PHP ahora está buscando index.php en la carpeta /var/www/nginx. Pero como la carpeta raíz es sólo "virtual", /var/www/nginx de PHP en realidad apunta a esta ubicación en el sistema de archivos real: /var/www/nginx/var/www/nginx.

Entonces, cambiar el parámetro a esto solucionará el error.

fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;

información relacionada