Назад | Перейти на главную страницу

Nginx + php5-fpm = «Файл не найден»

Я наткнулся на стену, создавая сайт с помощью nginx / fpm. На странице отображается сообщение «Файл не найден», и это отображается в журнале ошибок nginx:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

Я новичок как в nginx, так и в fpm, и это сообщение об ошибке ничего для меня не значит (даже компьютер Google не помог!). Может ли кто-нибудь пролить свет на то, что может происходить?

Вы должны иметь location раздел для обработки запросов PHP, настроенный аналогично этому:

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include         fastcgi_params;
    }

(Дополнительный try_files решает уязвимость безопасности что может позволить запускать произвольные файлы как PHP.)

Кроме того, ваш root следует определить в server раздел конфигурационного файла, не то location раздел. Это один из самых распространенных неправильная конфигурация nginx.

У меня просто была эта проблема в новой версии nginx. (конфиг взят из более старой версии)

Что мне нужно было сделать, так это разместить include fastcgi_params; выше моего обычая SCRIPT_FILENAME как это:

location @web {
        try_files $uri =404;
        include         fastcgi_params;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_param   SCRIPT_FILENAME  $document_root/index.php;
}

Как SCRIPT_FILENAME был перезаписан.

Это примечание для пассажирских установок.

Я только что установил nginx из исходного кода через пассажира, что вызвало проблему с php5-fpm. По умолчанию nginx.conf использует проблему, описанную Майклом Хэмптоном. Решение состоит в том, чтобы удалить блок вокруг директив root и index, поэтому:

location / {
    root html
    index index.html index.htm
}

становится:

root html
index index.html index.htm

Кроме того, неправильно настроен блок php. См. Ответ Майкла Хэмптона, чтобы узнать, как это сделать.

Дополнительное примечание может заключаться в том, что если php5-fpm настроен для использования сокетов, укажите параметр fastcgi_pass в блоке php в nginx.conf на настройку сокета в /etc/php5/fpm/pool.d/www.conf.

Если вы используете псевдонимы в своих блоках местоположения, необработанная ошибка 404 также может демонстрировать такое поведение. Вы можете увидеть это, если страница, отображаемая в браузере, представляет собой простой текст «Файл не найден», в отличие от более отформатированной (центрированной) страницы nginx 404. По сути, это действительно говорит о том, что страница 404 не может быть найдена.

Для решения добавьте дополнительный try_files $uri =404 в вашем блоке местоположения и перезагрузите конфигурацию nginx. В дополнение к чему Майкл Хэмптон сказал о устранение конкретной уязвимости безопасности, это также позволяет обработчику fastcgi переопределить определение псевдонима и найти сценарий 404 в местоположении по умолчанию.

sudo vim /etc/php-fpm.conf

о строке 149, измените пользователя php && группу пользователей

Сейчас тестирую успешно.

Я видел :

FastCGI отправлено в stderr: «Основной сценарий неизвестен» при чтении заголовка ответа из восходящего потока

на сервере, который я подвергал высокой нагрузке во время стресс-тестирования. Мое подозрение, которое еще предстоит подтвердить, состоит в том, что доступные дескрипторы файлов из ОС были исчерпаны. В этом случае php-fpm не может получить ссылку на файл.

Я понимаю, что это предположение, но оно определенно соответствует моему сценарию и может также помочь кому-то другому.

Спасибо @homeway, Ваш ответ меня вдохновляет. Большое спасибо!

Встречаю тот же вопрос, но Другой метод не помог мне решить вопрос!

Я решаю это, я считаю, что ключ в том, что: Право пользователя Linux приводит к вопросу: FastCGI отправлено в stderr: «Основной сценарий неизвестен»

Поскольку группа user: по умолчанию PHP-FPM - это apache: apache, но ваш каталог кода - someBody: someBody. Так что вы должны изменить права пользователя!

Я пишу блог, чтобы решить этот вопрос, вы можете увидеть этот блог:

[Nginx FastCGI отправил в stderr: «Неизвестный первичный скрипт»] [1] `[1]: http://geekhades.blogspot.com/2017/06/nginx-fastcgi-sent-in-stderr-primary.html