Nginx + Php5-fpm не рендеринг файлов php

8

Я потратил часы на то, чтобы понять, как установить Nginx + Ruby Enterprise Edition + PHP5-fpm и MYSQL, наконец, все установлено, и все, кажется, началось нормально.

Но по некоторым причинам php файлы не обрабатываются.

Файлы .html работают нормально, но когда я пытаюсь просмотреть файл .php, он выглядит так, как будто его не существует, хотя он и существует. Интересно, что когда я пытаюсь просмотреть файл .html, который не существует, я получаю хорошее сообщение Nginx 404, но когда я просматриваю файл .php, он даже не дает мне этого.

Так что, насколько я понимаю новичку, похоже, что с конфигурацией либо что-то не так, либо Nginx и PHP-fpm не общаются друг с другом.

Я смотрел на множество других примеров конфигурационных файлов nginx и уверен, что с этим все в порядке. Хорошо ... вот соответствующий бит файла conf в любом случае:

location ~ \.php$ {
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
   include fastcgi_params;
 }

А также

    fastcgi_connect_timeout 60;
 fastcgi_send_timeout 180;
 fastcgi_read_timeout 180;
 fastcgi_buffer_size 128k;
 fastcgi_buffers 4 256k;
 fastcgi_busy_buffers_size 256k;
 fastcgi_temp_file_write_size 256k;
 fastcgi_intercept_errors on;

Любая помощь очень ценится.

edit : вот заголовки, возвращаемые из тестового php-файла " http://eman.id.au/test.php ":

HTTP/1.1 404 Not Found =>
Server => nginx/0.8.54
Date => Thu, 16 Dec 2010 19:30:30 GMT
Content-Type => text/html
Connection => close
X-Powered-By => PHP/5.3.2-1ubuntu4.5ppa5~lucid1

Эммануэль
источник

Ответы:

10

Я полагаю, что я столкнулся с точно такой же проблемой сегодня, nginx отправляет запрос в php-fpm (как указано в заголовке), но вы получаете 404, даже если файл существует и вообще не имеет ошибки (PHP / синтаксис), и никакие ошибки не обнаруживаются ни в одном журнале (ngins или php-fpm).

Вы не включили полную конфигурацию nginx, но возможно ли, что у вас нет опции «root» define (правильно?) В разделе «сервер»? Вы должны убедиться, что это так, что он указывает на правильное местоположение c и находится внутри раздела «server», а не внутри раздела «location», например:

server {
    root /var/www/eman;
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
        include fastcgi_params;
    }
}
Фред
источник
Я не уверен, но это могло быть проблемой
Эммануэль
В итоге я перестроил VPS и попробовал снова, используя другой учебник, и теперь он работает нормально. :)
Эммануил
Это сработало для меня, и я использовал сокет unix для параметра fastcgi_pass
Шон
1

Если вы посмотрите на заголовки, на которые отвечает http://eman.id.au/test.php, то вы увидите X-Powered-By: PHP/5.3.2-1ubuntu4.5ppa5~lucid1. Это не показывало бы это, если бы запрос не был передан PHP. Кроме того, если PHP не может найти путь к файлу, переданному ему, он выдаст ошибкуNo input file specified.

Так как ваш сайт выводит заголовок powered by и не содержит No input file specified.ошибок, наиболее вероятной причиной является то, что у вас есть ошибка в вашем PHP-скрипте и отключены ошибки отображения. Это приводит к появлению пустой страницы и записи в вашем журнале ошибок, поэтому загляните туда и посмотрите, не заполняется ли она.

Мартин Фьордвальд
источник
Ах, так оно и есть! Я просматривал страницу в Google Chrome, и она просто выдала мне ошибку 404, но я только что просмотрел ее в Firefox, и это просто пустая страница. В скрипте php ошибок нет. На самом деле я только что вынул из него весь php, и единственным его содержимым является тег h1
Emmanuel
Я обновил свой исходный пост с заголовками http файла test.php
Эммануэль
И вы абсолютно уверены, что ваши скрипты находятся в / var / www / eman / и что путь и файлы читаются и исполняются процессом PHP?
Мартин Фьордвальд
Да, они являются сценариями, которые, безусловно, находятся в / var / www / eman / файл test.php находится в том же каталоге, что и index.html, который работает нормально. Что я должен проверить, чтобы убедиться, что они читаемы и выполняются процессом PHP ??? Я не уверен в этом?
Эммануэль
Итак, вы порождаете PHP каким-либо образом через spawn-fcgi или php-fpm, файл конфигурации или команда, используемая для порождения, должны содержать пользователя процесса, после чего вам нужно будет проверить разрешение linux для этого пользователя.
Мартин Фьордвальд,
0

Пара мыслей:

   fastcgi_param SCRIPT_FILENAME /var/www/eman$fastcgi_script_name;

Нужна ли дополнительная косая черта

   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;

В NGINX есть и странная вещь, связанная с кэшированием, поэтому, когда вы пробуете URL в своем браузере, добавьте? Random = 12391 в конец, чтобы вызвать обновление. Я был озадачен в течение 30 минут из-за конфигурации, но обнаружил, что она работает все время, но кэш запутался.

Вы также, вероятно, хотите избежать своего местоположения немного лучше (хотя это не вызывает возникшей у вас проблемы). Лучше попрактикуйтесь:

location ~ .php$

в

location ~ \.php$

.php $ будет соответствовать запросу типа yourpagephp, а не просто yourpage.php

Эндрю Тейлор
источник
Хорошо, я отредактировал файлы conf, но все равно не повезло ...
Эммануэль
URL: eman.id.au/test.php, сам eman.id.au отлично работает на index.html
Эммануэль
Кэширование неверно, Nginx не кеширует ничего, о чем вы специально не говорите. Это не похоже на Apache, однако, изменение файла конфигурации требует перезагрузки файла конфигурации. Кроме того, ваш браузер будет кешировать запросы, так что это может вас смущать.
Мартин Фьордвальд,