@sferg1985
Рассказывать долго. Сами спросите о чём нужно.

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

Здравствуйте, господа. Имеется связка Nginx + PHP7-FPM. При попытке открыть несуществующий файл test.php
(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;
    }
}
  • Вопрос задан
  • 4695 просмотров
Решения вопроса 1
@sferg1985 Автор вопроса
Рассказывать долго. Сами спросите о чём нужно.
Решено! В файле /etc/php/7.0/fpm/php.ini выставил значение переменной cgi.fix_pathinfo в 0.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Xilian
Программист 1С, сетевые технологии, SQL
У тебя запрос перенаправляется в fastcgi. Он и выдает ошибку.
>>FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream,

nginx тут не причем - он не совсем http-сервер, он reverse proxy .
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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