
Tentando configurar um ambiente Apache VirtualHosting com PHP em um nó CentOS recém-criado no servidor em nuvem DigitalOcean.
O problema é que, emboraA hospedagem virtual está funcionando por si só, o PHP não.
Configuração do servidor:
- Servidor Web: CentOS 6.5 com Apache/2.2.15
- Versão PHP: 5.3.3 (para ser usado como módulo Apache)
Etapas tomadas:
Efetuando login comoraizdo utilizador,
- Instalando Apache e PHP:
yum -y install httpd php
- Criando um novo arquivo de configuração de host virtual como abaixo:
Arquivo:/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>
- Criando novos diretórios para o site host virtual
Como abaixo,
mkdir -p /srv/www/example.org/public_html
mkdir -p /srv/www/example.org/logs
- Colocando um
.php
e.html
arquivos de teste como abaixo:
Arquivos em /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
Em seguida, quando aponto meu navegador para index.html
, ele funciona. Mas quando euaponte meu navegador para index.php
recebo uma página em branco.
Solução de problemas
(Coisas que já fiz/verifiquei sem sorte)
- Garantido que o Apache esteja em execução e
DocumentRoot
acessível - Todos os diretórios são
755
e arquivos644
- Log de acesso do Apache verificado. As solicitações de página HTML estão lá com código de status 200, mas nenhuma
.php
solicitação de página presente no log de acesso - Nenhum erro no log de erros do Apache ou PHP, nenhum erro no
/var/log/messages
- Tentei adicionar
php_admin_flag engine on
o arquivo de configuração do vhost
Veja também abaixo o conteúdo do/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
Responder1
Na minha experiência, o PHP renderiza uma página em branco quando encontra um erro grave subjacente. Geralmente é fácil de consertar, mas infelizmente nada é registrado nos logs do Apache, logs do PHP ou syslog, dificultando o processo de solução de problemas.
Encontre seu arquivo de configuração php.ini usando:
php -i | grep "php.ini"
Isso deve produzir algo assim:
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
Edite este arquivo de configuração (/etc/php.ini neste caso) com seu editor de texto favorito e certifique-se de que a exibição de erros e erros de inicialização esteja ativada. As entradas devem ficar assim:
display_errors = On
display_startup_errors = On
Por fim, reinicie o Apache para que ele leia a nova configuração do PHP e acesse sua página via curl ou navegador. Isso deve produzir uma mensagem de erro que ajudará no processo de solução de problemas.
Responder2
A primeira coisa que você deve fazer é verificar os logs de erros do Apache que você definiu na configuração do Apache; copiado abaixo:
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>
O PHP é executado no Apache, portanto, quaisquer erros que aparecerem aparecerão nos logs do servidor. Eu recomendo fazer login no servidor e usar tail
assim:
tail -f -n 200 /srv/www/example.org/logs/error.log
Mas esse é o log geral do Apache para você? Ou essa é a configuração da DigitalOcean? Porque esse caminho /srv/www/example.org/logs/
parece bastante estranho. No Linux padrão, estaria em um local como este:
tail -f -n 200 /var/log/apache2/error.log
Independentemente de para onde os logs estão sendo enviados, essa será a chave para o que está acontecendo – ou não – com PHP e Apache em seu servidor.