FastCGI: Невозможно открыть основной скрипт на NGinx и PHP-FPM

Я, очевидно, не единственный, у кого есть эта проблема, но, попробовав все предлагаемые решения для пары, я достиг точки, где я не знаю, что делать .

Я использую Ubuntu 16.04, NGinx и PHP-FPM.

По умолчанию используется nginx.conf, я установил только более информативный формат журнала.

Права пользователя вроде в порядке: NGinx и PHP_FPM работают под пользовательскими www-данными. Владелец корневого документа - www-data. Владелец FPM-Pool - www-data. Socket-файл есть и доступен для записи.

Я уже пробовал установить самые слабые права доступа к папкам и файлам (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:

[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"
3
задан 29 August 2018 в 18:48
1 ответ

Я обнаружил ошибку для себя после намека @michael - спасибо за просветление.

Я использую chroot, потому что цель - "заточить" каждый веб-сайт отдельно среда / папка. Поэтому я установил корень этой конкретной среды в реальное расположение файловой системы / var / www / nginx .

Внутри конфигурации сервера NGinx я передаю параметр SCRIPT_FILENAME в fastcgi с помощью ведущий $ document_root.

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

В NGinx $ document_root ссылается на корневую директиву. $ Document_root, конечно же, / var / www / nginx

Но среда PHP- имеет «измененный корень» (/ означает / var / www / nginx). Это означает, что PHP теперь ищет index.php в папке / var / www / nginx. Но поскольку корневая папка является только «виртуальной», PHP / var / www / nginx фактически указывает на это место в реальной файловой системе: /var/www/nginx/var/www/nginx.

, поэтому измените параметр на это исправит ошибку.

fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
1
ответ дан 3 December 2019 в 07:21

Теги

Похожие вопросы