:Data: 03sep2008 :Autor: Rafael Oliveira Configurando um Virtual Host no Apache para acessar um site Plone ================================================================= Introdução ---------- Muitas vezes necessário configurar o Apache para acessar um site Plone. Uma razão para fazer isso é permitir que o site seja acessado na porta 80 (padrão do protocolo HTTP), uma vez que: * Por padrão o Zope não pode ser iniciado como root. * No Linux apenas o usuário root pode escutar nas portas com número menor que 1024. Este tutorial foi testado na seguinte configuração: * Debian Lenny * Apache 2.2.8 * Zope 2.10 Entendendo a configuração do Apache no Debian --------------------------------------------- No Debian o Apache vem configurado de forma diferente de outras distribuições, principalmente das Red Hat-like. A primeira diferença é a seguinte: o arquivo de configuração principal do apache é ``/etc/apache2/apache2.conf``. Em outras distribuições normalmente esse arquivo se chama ``httpd.conf``. O arquivo ``apache2.conf`` vem configurado para usar virtual hosts por padrão. Este arquivo inclui todos os arquivos contidos no diretório ``/etc/apache2/sites-enabled``. Esse diretório, por sua vez, contém symlinks para arquivos do diretório ``/etc/apache2/sites-available``. Um site chamado ``default`` (arquivo ``/etc/apache2/sites-available/default`` com um symlink em ``/etc/apache2/sites-enabled/000-default``) é incluído por padrão. Esse site é o que vem configurado normalmente nas outras distribuições, usando como diretório raiz ``/var/www``. Para criar um novo site (ou virtual host), portanto, deve-se criar um arquivo em ``/etc/apache2/sites-available`` e criar um symlink na pasta ``/etc/apache2/sites-enabled``. A configuração dos módulos é feita de modo semelhante. O ``apache2.conf`` inclui todos os arquivos em ``/etc/apache2/mods-enabled``, que, por sua vez, contém symlinks para arquivos no diretório ``/etc/apache2/mods-available``. Portanto, o controle de quais módulos estão ativos é feito adicionando e removendo symlinks ao diretório ``/etc/apache2/mods-enabled``, para os arquivos ``NOME_DO_MODULO.load`` e ``NOME_DO_MODULO.conf`` existentes no diretório ``/etc/apache2/mods-available``. Criando um novo virtual host ---------------------------- .. ATTENTION:: Todos os comandos e edições de arquivo abaixo devem ser feitos como root. Será criado um novo virtual host escutando na porta 80, que redirecionará para um site Zope. Algumas variáveis que serão mencionadas no restante do tutorial: * ``[HOST_ADDR]``: Número do IP ou nome de domínio do servidor onde está o Apache. Exemplos: ``201.166.17.3`` ou ``www.empresa.com``. * ``[ZOPE_ADDR]``: Número do IP ou nome de domínio onde está o Zope. Pode ser igual a ``[HOST_ADDR]``. * ``[ZOPE_PORT]``: Número da porta que o Zope escuta. Exemplo: ``8080``. * ``[PLONE_SITE]``: Id do Plone Site. Deve-se substituir o valor apropriado no lugar dessas variáveis nos trechos de arquivos ou comandos a seguir. A primeira coisa a se fazer é desabilitar o site ``default``:: rm /etc/apache2/sites-enabled/000-default Em seguida crie o arquivo ``/etc/apache2/sites-available/meu_site`` com o seguinte conteúdo:: ServerName [HOST_ADDR] RewriteEngine on RewriteRule ^/(.*) http://[ZOPE_ADDR]:[ZOPE_PORT]/VirtualHostBase/http/[HOST_ADDR]:80/[PLONE_SITE]/VirtualHostRoot/$1 [L,P] AllowOverride None Order Allow,Deny Allow from all .. ATTENTION:: Se o Zope e o Apache estiverem na mesma máquina substitua ``[ZOPE_ADDR]`` no arquivo acima por ``127.0.0.1``. Para ativar o virtual host:: ln -s /etc/apache2/sites-available/meu_site /etc/apache2/sites-enabled Configuração do módulo Proxy ---------------------------- Para que a configuração acima funcione é preciso que o módulo Proxy esteja ativado. Para isto execute o seguinte:: ln -sf /etc/apache2/mods-available/proxy.conf /etc/apache2/mods-enabled ln -sf /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled ln -sf /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled Além disso é necessário diminuir a segurança na configuração do módulo. Edite o arquivo ``/etc/apache2/mods-available/proxy.conf``. Altere a seção ```` para ficar da seguinte forma:: AddDefaultCharset off Order allow,deny Allow from all Reiniciando o Apache -------------------- Após feitas as configurações reinicie o Apache:: /etc/init.d/apache2 restart Pronto ! Solução de problemas -------------------- O arquivo ``/var/log/apache2/error.log`` pode ser inspecionado para solucionar problemas. Se ao tentar acessar o site Plone a seguinte mensagem aparecer no browser, verifique o arquivo de log. You don't have permission to access / on this server. Normalmente uma das duas situações abaixo está ocorrendo: * O log contém uma mensagem do tipo:: [Wed Sep 03 08:20:50 2008] [error] [client 127.0.0.1] client denied by server configuration: proxy:http://[...] Nesse caso a configuração de segurança do módulo Proxy pode estar errada. * O log contém uma mensagem do tipo:: [Wed Sep 03 08:00:18 2008] [error] [client 192.168.1.101] attempt to make remote request from mod_rewrite without proxy enabled: proxy:http://[...] Nesse caso o módulo Proxy pode não estar corretamente habilitado. Uma técnica útil para isolar o problema é mudar o redirecionamento para um site conhecido, ao invés de redirecionar para o site Zope. Altere o arquivo ``/etc/apache2/sites-available/meu_site`` para algo como:: ServerName [HOST_ADDR] RewriteEngine on RewriteRule ^/(.*) http://www.google.com [L,P] [...] Dessa forma você poderá verificar se o problema está na configuração do virtual host ou no Zope.