nginx 12 FastCGI отправлено в stderr: Основной скрипт неизвестен

Вопрос или проблема

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

Вот что я нашел в логах ошибок:

2018/08/30 09:36:29 [error] 1525#1525: *12 FastCGI отправил в stderr: “Первичный скрипт неизвестен” во время чтения заголовка ответа от upstream, клиент: 127.0.0.1, сервер: admin.local, запрос: “GET / HTTP/1.1”, upstream: “fastcgi://unix:/run/php/php7.2-fpm.sock:”, host: “admin.local”

Дело в том, что вчера я мог загрузить admin.local в своем браузере. Единственная ошибка заключалась в том, что у меня появлялось сообщение “Файл не найден”, если я нажимал на ссылку (не мог зайти глубже, чем /admin.local/). Теперь у меня появилось сообщение “Файл не найден” на главной странице. Я ничего не менял.

Моя система:
Linux Mint 18
PHP 7.2.9-1+ubuntu16.04.1+deb.sury.org+1
версия nginx: nginx/1.14.0

Расположение моего index.php:

lrwxrwxrwx 1 www-data www-data   40 Aug 29 13:49 admin -> /home/me/projekte/admin/public/

Моя директория x для nginx выглядит так:

.
├── conf.d
│   └── default.conf
├── fastcgi_params
├── koi-utf
├── koi-win
├── mime.types
├── modules -> /usr/lib/nginx/modules
├── nginx.conf
├── scgi_params
├── sites-available
│   └── admin.conf
├── sites-enabled
│   └── admin.conf -> ../sites-available/admin.conf
├── snippets
│   └── fastcgi-php.conf
├── uwsgi_params
└── win-utf

nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*.conf;
}

admin.conf (/sites-enabled)

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html/admin;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name admin.local;

    location / {
    try_files $uri $uri/ /index.php$is_args$args;#=404;
    }

    location ~ \.php$ {

        try_files $uri =404;
                fastcgi_read_timeout 864000;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                #fastcgi_param SERVER_NAME $host;
                fastcgi_param PHP_IDE_CONFIG serverName=$server_name;

        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

etc/hosts

127.0.0.1   admin.local

fastcgi_params

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

Я обновил свой admin.conf до:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /website/admin/public;
    index index.php;

    server_name admin.local;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;#=404;
    }

    location ~ \.php$ {

                fastcgi_split_path_info ^(.+\.php)(.*)$;
                try_files $uri =404;
                fastcgi_read_timeout 864000;
#               fastcgi_split_path_info ^(.+\.php)(.*)$;
                fastcgi_index index.php;
#               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#               fastcgi_param SERVER_NAME $host;
#               fastcgi_param PHP_IDE_CONFIG serverName=$server_name;

                include /etc/nginx/fastcgi_params;
                fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

Это решило мою проблему.

Ответ или решение

Ошибка "Primary script unknown" в Nginx, отправленная через FastCGI, обычно указывает на то, что сервер не может найти или получить доступ к запрашиваемому PHP-скрипту. В вашем случае, проблема возникла в конфигурации Nginx. Давайте разберем основные моменты и рекомендации по исправлению.

  1. Путь к SCRIPT_FILENAME: Основной причиной ошибки может быть неправильное значение для параметра SCRIPT_FILENAME, который указывает Nginx, где находится скрипт, который нужно выполнить. Убедитесь, что fastcgi_param SCRIPT_FILENAME установлен правильно. Это должен быть полный путь к скрипту:

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    Ваша конфигурация должна корректно устанавливать document_root. Измените следующую строку, чтобы использовать root из вашего server блока:

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  # Убедитесь, что этот параметр есть
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        # Прочие параметры
    }
  2. Проверка прав доступа: Убедитесь, что файлы, к которым вы пытаетесь получить доступ через Nginx, имеют правильные права доступа. Вы можете использовать команду ls -l для проверки прав доступа на директорию и файлы вашего проекта:

    ls -l /home/me/projekte/admin/public/

    Убедитесь, что пользователь, под которым работает Nginx (обычно это www-data), имеет доступ к этим файлам и директориям.

  3. Очистка кеша: Если вы внесли изменения в конфигурацию или файлы, не забудьте перезапустить Nginx, чтобы они вступили в силу:

    sudo systemctl restart nginx
  4. Структура ваших директорий: Обратите внимание, что root в вашем серверном блоке установлен как /var/www/html/admin, а не /home/me/projekte/admin/public. Если ваш index.php находится в /home/me/projekte/admin/public/, вам нужно изменить путь root в своем конфигурационном файле на:

    root /home/me/projekte/admin/public;
  5. Перепроверьте конфигурацию: Если вы внесли изменения в admin.conf, убедитесь, что вы используете правильные пути и не оставили лишние комментарии, которые могут вызвать конфликты. После изменений в конфигурации снова перезапустите Nginx.

В результате модификации и проверки указанных пунктов, ошибка должна исчезнуть, и вы сможете получить доступ к вашему приложению без проблем. Если проблема не устранена, проверьте журналы ошибок Nginx для более детального анализа ситуации:

tail -f /var/log/nginx/error.log

Следуя этим рекомендациям, вы сможете решить проблему "Primary script unknown".

Оцените материал
Добавить комментарий

Капча загружается...