Вопрос или проблема
сервер {
слушать 80;
имя_сервера test.local;
доступ_журнал /var/log/nginx/access.log;
журнал_ошибок /var/log/nginx/error.log;
корень /var/www/testsite;
местоположение ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
включить /etc/nginx/fastcgi_params;
}
}
Запросы к php файлам просто возвращают код в виде простого текста. Заголовки упоминают PHP, так что я предполагаю, что nginx правильно взаимодействует с PHP ..
Я слишком много раз просматривал это, и мне кажется, что я смотрю прямо на проблему. Можете помочь?
Проверьте, начинаются ли ваши файлы с < ? .
Если да, и вы хотите оставить их так, вам нужно будет отредактировать /etc/php5/fpm/php.ini и установить short_open_tag с Off на On и перезапустить php-fpm.
sudo nano /etc/php5/fpm/php.ini
Найдите short_open_tag и установите его в On.
Перезагрузите php-fpm
sudo service php5-fpm restart
Ответ или решение
Когда вы сталкиваетесь с проблемой рендеринга PHP-файлов в виде обычного текста в Nginx, это может быть вызвано несколькими факторами. Рассмотрим вашу конфигурацию и предложим возможные решения.
Анализ конфигурации Nginx
Ваш файл конфигурации Nginx выглядит следующим образом:
server {
listen 80;
server_name test.local;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /var/www/testsite;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include /etc/nginx/fastcgi_params;
}
}
В данной конфигурации Nginx правильно настроен на обработку PHP-файлов, но если они возвращаются в виде обычного текста, вероятнее всего, есть проблема с интеграцией между Nginx и PHP-FPM.
Возможные причины проблемы
-
Отсутствие обработки PHP: Если PHP не установлен либо неправильно настроен, Nginx не сможет обработать PHP-файлы. Убедитесь, что PHP и PHP-FPM установлены и работают.
-
Неверное сопоставление файлов: Проверьте, что конфигурация Nginx правильно настроена для обработки
*.php
файлов. Убедитесь, что ваши PHP-файлы имеют необходимое расширение и находятся в правильной директории. -
Ошибка в fastcgi_params: Возможно, в файле
/etc/nginx/fastcgi_params
отсутствуют необходимые строки для передачи переменных окружения, например,SCRIPT_FILENAME
. Этот параметр должен указывать на полный путь файла, который нужно обработать.
Решение проблемы
-
Обработка заголовков: Убедитесь, что файл
/etc/nginx/fastcgi_params
содержит следующую строку:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Эта строка указывает на правильное местоположение PHP-файла, который должен обрабатываться PHP-FPM.
-
Проверка работы PHP-FPM: Убедитесь, что служба PHP-FPM работает и нет ошибок. Для этого выполните команду:
sudo service php5-fpm status
Если служба не запущена, запустите её:
sudo service php5-fpm start
-
Проверка наличия
short_open_tag
: Если ваши PHP-скрипты используют краткие теги (<?) вместо стандартных (< ? php), убедитесь, чтоshort_open_tag
включен. Для этого выполните:sudo nano /etc/php5/fpm/php.ini
Найдите строку
short_open_tag
и установите её значение наOn
:short_open_tag = On
Затем перезапустите PHP-FPM для применения изменений:
sudo service php5-fpm restart
-
Проверка логов: Проверяйте логи Nginx и PHP-FPM на наличие ошибок. Логи могут дать подсказки о том, что именно пошло не так:
tail -f /var/log/nginx/error.log tail -f /var/log/php5-fpm.log
Заключение
Рендеринг PHP кода в виде обычного текста может быть вызван неправильной конфигурацией Nginx или PHP-FPM. Проверьте настройки, убедитесь в правильном наличии всех необходимых параметров и проверьте логи на наличие ошибок. Применение указанных выше решений должно помочь вам устранить проблему. Если, после всех проверок, проблема не устранена, рассмотрите возможность обращения к документации Nginx и PHP-FPM для более глубокой диагностики.