Я использую 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, я вижу, что переменные установлены правильно:
SCRIPT_FILENAME
является /opt/example/_index.php
SCRIPT_NAME
является /_index.php
DOCUMENT_ROOT
является /opt/example
REQUEST_URI
является /_index.php
DOCUMENT_URI
является /_index.php
Скрипт действительно находится по адресу /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
как было предложено в комментариях Майкла Хэмптона.