
Пытаюсь настроить среду Apache VirtualHosting с PHP на свежесозданном узле CentOS на облачном сервере DigitalOcean.
Проблема в том, что, хотяВиртуальный хостинг работает сам по себе, PHP — нет.
Настройка сервера:
- Веб-сервер: CentOS 6.5 с Apache/2.2.15
- Версия PHP: 5.3.3 (для использования в качестве модуля Apache)
Предпринятые шаги:
Вход в систему каккореньпользователь,
- Установка Apache и php:
yum -y install httpd php
- Создание нового файла конфигурации виртуального хоста, как показано ниже:
Файл:/etc/httpd/conf.d/vhosts.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.org
ServerAlias www.example.org
DocumentRoot /srv/www/example.org/public_html/
ErrorLog /srv/www/example.org/logs/error.log
CustomLog /srv/www/example.org/logs/access.log combined
</VirtualHost>
- Создание новых каталогов для сайта виртуального хоста
Как показано ниже,
mkdir -p /srv/www/example.org/public_html
mkdir -p /srv/www/example.org/logs
- Размещаем
.php
и.html
тестируем файлы, как показано ниже:
Файлы в /srv/www/example.org/public_html/
(DocumentRoot)
echo "<HTML>It work's</HTML>" > /srv/www/example.org/public_html/index.html
echo "<?php echo ("It works"); ?>" > /srv/www/example.org/public_html/index.php
Далее, когда я указываю в своем браузере index.html
, это работает. Но когда яукажите в моем браузере, index.php
я получаю пустую страницу.
Поиск неисправностей
(То, что я уже сделал/проверил, но безуспешно)
- Убедитесь, что Apache запущен и
DocumentRoot
доступен. - Все каталоги
755
и файлы644
- Проверил журнал доступа Apache. Запросы html-страницы есть с кодом статуса 200, но
.php
в журнале доступа нет запроса страницы - Нет ошибок в журнале ошибок Apache или PHP, нет ошибок в
/var/log/messages
- Попробовал добавить
php_admin_flag engine on
в файл конфигурации vhost
Также см. ниже содержание/etc/httpd/conf.d/php.conf
<IfModule prefork.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
LoadModule php5_module modules/libphp5-zts.so
</IfModule>
AddHandler php5-script .php
AddType text/html .php
DirectoryIndex index.php
решение1
По моему опыту, PHP отображает пустую страницу, когда сталкивается с серьезной базовой ошибкой. Обычно это легко исправить, но, к сожалению, в журналах Apache, PHP или syslog обычно ничего не регистрируется, что затрудняет процесс устранения неполадок.
Найдите файл конфигурации php.ini с помощью:
php -i | grep "php.ini"
Это должно привести к чему-то вроде этого:
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
Отредактируйте этот файл конфигурации (в данном случае /etc/php.ini) с помощью вашего любимого текстового редактора и убедитесь, что отображение ошибок и ошибок запуска включено. Записи должны выглядеть следующим образом:
display_errors = On
display_startup_errors = On
Наконец, перезапустите Apache, чтобы он прочитал новую конфигурацию PHP и получил доступ к вашей странице через curl или браузер. Это должно привести к сообщению об ошибке, которое поможет в процессе устранения неполадок.
решение2
Первое, что вам следует сделать, это проверить журналы ошибок Apache, которые вы настроили в своей конфигурации Apache; скопировано ниже:
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.org
ServerAlias www.example.org
DocumentRoot /srv/www/example.org/public_html/
ErrorLog /srv/www/example.org/logs/error.log
CustomLog /srv/www/example.org/logs/access.log combined
</VirtualHost>
PHP работает под Apache, поэтому любые всплывающие ошибки будут отображаться в журналах сервера. Я рекомендую войти на сервер и использовать tail
вот так:
tail -f -n 200 /srv/www/example.org/logs/error.log
Но это общий лог Apache для вас? Или это конфигурация DigitalOcean? Потому что этот путь /srv/www/example.org/logs/
кажется довольно странным. В стандартном Linux он будет в таком месте:
tail -f -n 200 /var/log/apache2/error.log
Независимо от того, куда на самом деле отправляются логи, это будет ключом к тому, что происходит — или не происходит — с PHP и Apache на вашем сервере.