LINUX.ORG.RU

«Primary script unknown» в логах Nginx при попытке открыть несуществующий php-скрипт. В чём может быть проблема?

 , ,


0

1

Здравствуйте, господа. Имеется связка Nginx + PHP7-FPM. При попытке открыть несуществующий файл test.php (http://example.com/test.php) получаю в браузере сообщение «File not found». При этом в /var/log/nginx/error.log появляется следующее:

2018/01/16 21:53:04 [error] 10214#10214: *21 FastCGI sent in stderr: «Primary script unknown» while reading response header from upstream, client: 192.168.0.104, server: example.com, request: «GET /test.php HTTP/1.1», upstream: «fastcgi://unix:/var/run/php/php7.0-fpm_example.com.sock:», host: «example.com»

При этом существующие php-файлы открываются исправно, без вывода чего-либо в /var/log/nginx/error.log.

В чём может быть дело? Предполагалось, что при обращении к несуществующему php-файлу (как и к любому другому несуществующему файлу), Nginx выдаст в браузере ошибку 404, а в /var/log/nginx/error.log будет записано сообщение об отсутствии запрашиваемого файла вроде этого:

2018/01/16 22:20:03 [error] 10642#10642: *11 open() «/home/example.com/www/test.php» failed (2: No such file or directory), client: 192.168.0.104, server: example.com, request: «GET /test.php HTTP/1.1», host: «example.com»

Ниже прилагаю конфиг /etc/nginx/sites-available/example.com.conf:

server {
    server_name             example.com;
    root                    /home/example.com/www;
    listen                  80;
    access_log              /var/log/nginx/access.log;
    error_log               /var/log/nginx/error.log error;

    location ~ \.php$ {
        fastcgi_param SERVER_SIGNATURE      nginx;
        fastcgi_param SERVER_SOFTWARE       nginx;
        fastcgi_param SERVER_NAME           $server_name;
        fastcgi_param SERVER_ADDR           $server_addr;
        fastcgi_param SERVER_PORT           $server_port;
        fastcgi_param SERVER_PROTOCOL       $server_protocol;
        fastcgi_param SERVER_ADMIN          admin@$server_name;
        fastcgi_param HTTPS                 $https if_not_empty;
        fastcgi_param GATEWAY_INTERFACE     CGI/1.1;
        fastcgi_param DOCUMENT_ROOT         $document_root/;
        fastcgi_param DOCUMENT_URI          $document_uri;
        fastcgi_param QUERY_STRING          $query_string;
        fastcgi_param SCRIPT_FILENAME       $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME           $fastcgi_script_name;
        fastcgi_param REDIRECT_STATUS       200;
        fastcgi_param REDIRECT_QUERY_STRING $query_string;
        fastcgi_param REDIRECT_URL          $request_uri;
        fastcgi_param REQUEST_URI           $request_uri;
        fastcgi_param REQUEST_METHOD        $request_method;
        fastcgi_param REMOTE_ADDR           $remote_addr;
        fastcgi_param REMOTE_PORT           $remote_port;
        fastcgi_param REMOTE_USER           $remote_user;
        fastcgi_param CONTENT_TYPE          $content_type;
        fastcgi_param CONTENT_LENGTH        $content_length;
        fastcgi_index                       index.php;
        fastcgi_pass                        unix:/var/run/php/php7.0-fpm_example.com.sock;
    }
}



Последнее исправление: Sferg (всего исправлений: 1)

Эту ошибку отдает php-fpm. Попробуй директиву try_files, если хочешь, чтобы такие случаи обрабатывались nginx'ом

anonymous
()
Ответ на: комментарий от anonymous

Решено! В файле /etc/php/7.0/fpm/php.ini выставил значение переменной cgi.fix_pathinfo в 0.

Sferg
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.