FastCGI: NGinx 및 PHP-FPM에서 기본 스크립트를 열 수 없습니다.

FastCGI: NGinx 및 PHP-FPM에서 기본 스크립트를 열 수 없습니다.

이 문제가 나만 있는 것은 아니지만 커플을 위해 제안된 모든 솔루션을 시도한 후에 무엇을 해야할지 모르는 지점에 도달했습니다.

저는 Ubuntu 16.04, NGinx 및 PHP-FPM을 실행하고 있습니다.

nginx.conf가 기본 파일이므로 더 많은 정보를 제공하는 로그 형식만 설정했습니다.

사용자 권한은 괜찮은 것 같습니다. NGinx와 PHP_FPM은 사용자 www-data에서 실행됩니다. 문서 루트 소유자는 www-data입니다. FPM-풀 소유자는 www-data입니다. 소켓 파일이 있고 쓰기 가능합니다.

이미 폴더 및 파일 권한을 가장 약한 수준(chmod 777)으로 설정해 보았으나 결과가 없습니다.

이것은 내 server.conf입니다. 주석 처리된 줄에서 볼 수 있듯이 저는 여러 가지 트릭을 시도했지만 아무런 효과가 없었습니다.

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

}    

이것이 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

이것은 nginx의 access.log 출력입니다:

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

이것이 실제 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"

답변1

@michael의 힌트를 듣고 오류를 발견했습니다. 깨달음에 감사드립니다.

저는 chroot를 사용하고 있습니다. 왜냐하면 목표는 모든 웹사이트를 "감옥"하는 것이기 때문입니다.환경/ 폴더. 그래서 저는 이 특정의 루트를 설정했습니다.환경실제 파일 시스템 위치/var/www/nginx.

NGinx의 서버 구성 내에서 $document_root로 시작하는 fastcgi 매개변수 SCRIPT_FILENAME을 전달합니다.

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

NGinx에서 $document_root는 root 지시어를 참조합니다. $document_root는 물론입니다./var/www/nginx

하지만 PHP-환경"변경된 루트"가 있습니다(/는 /var/www/nginx를 의미함). 즉, PHP는 이제 /var/www/nginx 폴더에서 index.php를 찾고 있습니다. 그러나 루트 폴더는 "가상"이므로 PHP의 /var/www/nginx는 실제로 실제 파일 시스템의 /var/www/nginx/var/www/nginx 위치를 가리킵니다.

따라서 매개변수를 이것으로 변경하면 오류가 수정됩니다.

fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;

관련 정보