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

PHP-FPM Первичный скрипт неизвестен, но SCRIPT_FILENAME установлен правильно

Я использую Nginx 1.5.12.1 с PHP-FPM для PHP 5.6.5 на CentOS 6.6 x64. Когда я захожу на любую страницу, я получаю 404 с ошибкой:

Файл не найден.

В моем журнале ошибок PHP-FPM нет ничего полезного, но мой журнал ошибок Nginx:

2015/04/02 10:25:44 [ошибка] 24689 # 0: * 35 FastCGI отправлено в stderr: «Первичный сценарий неизвестен» при чтении заголовка ответа от восходящего потока, клиент: 172.31.42.64, сервер: _, запрос: «GET /_index.php HTTP / 1.1 ", восходящий поток:" fastcgi: //127.0.0.1: 9000 ", хост:" www.dev.example.com "

В этот момент вы, вероятно, думаете, что SCRIPT_FILENAME настроен неправильно. Это не так или, по крайней мере, мне кажется правильным. Если я запускаю сниффер пакетов и исследую соединение между Nginx и PHP-FPM, я вижу, что переменные установлены правильно:

Скрипт действительно находится по адресу /opt/example/_index.php, а корень документа - /opt/example. Вы видите что-то не так с этими переменными, переданными в PHP-FPM?

Предполагая, что они верны, я предположил, что PHP-FPM не имеет доступа к файлам. Я установил все на 777, включая весь example каталог. Это не решило проблему.

Какие еще причины, по которым PHP-FPM вернет «Основной сценарий неизвестен»? Как я могу дальше отладить ситуацию? Существуют ли какие-либо другие разрешения, необходимые PHP-FPM для работы?

Редактировать: Я обнаружил, что если я запускаю PHP-FPM как root, моя проблема будет решена, так что это будет своего рода проблема с разрешениями, но я не знаю что, поскольку скрипты и каталоги, в которых они находятся, широко открыты.

SELinux был включен и предотвращал любой доступ к файловой системе для пользователя, от имени которого работал PHP-FPM. Изменение этого решило проблему.

Это было видно, проверив /var/log/audit/audit.log как было предложено в комментариях Майкла Хэмптона.