sábado, 18 de dezembro de 2010

Servidor LAMP - Virtual host redirecionamento [Linux]

Virtual Hosts


Outro recurso suportado pelo Apache, e muito usado, é a possibilidade de hospedar vários sites no mesmo servidor (shared hosting). Mais de 80% dos sites da internet são hospedados dessa forma econômica.

Nesse caso, os arquivos de cada site ficam guardados em uma pasta diferente e o servidor se encarrega de direcionar cada visitante ao site correto. Servidores como os dos serviços de hospedagem gratuita exploram esse recurso ao extremo, com um número assustador de sites hospedados em cada servidor.

Em um host compartilhado, os recursos do servidor (HD, memória, processamento e link) são divididos entre os sites hospedados, assim como vários programas abertos simultaneamente disputam os recursos da máquina. Isso faz muito sentido no caso de sites pequenos ou médios, que não possuem um número suficiente de visitas para saturarem, sozinhos, o servidor.

Ao hospedar seu site em um host compartilhado, você tem direito a uma determinada quota de espaço em disco e pode acessar os arquivos do site via FTP ou SFTP. Porém, você não pode instalar novos pacotes, nem alterar a configuração do servidor: fica limitado aos recursos disponíveis.

A segunda opção é alugar um host dedicado, onde você tem um servidor completo à sua disposição, inclusive com a possibilidade de criar virtualhosts e hospedar outros sites.

Invariavelmente, ao hospedar vários domínios, você precisa configurar um servidor DNS (o mais usado é o Bind) para responder a todos os domínios hospedados no servidor, entregando o endereço IP do seu servidor Apache. Não é necessário que o DNS esteja instalado no mesmo servidor que o Apache, a função dele será unicamente responder às requisições dos clientes, fornecendo o IP correto.

Em muitos casos, a própria empresa que lhe aluga o servidor oferece esse serviço, mas vamos aprender como fazer isso manualmente logo a seguir.

Configurar um servidor DNS pode ser um pouco indigesto, mas a configuração do Apache é bastante simples. Em primeiro lugar, você deve criar uma pasta separada para cada site que será hospedado. Você pode usar a própria pasta "/var/www", como em:

# mkdir /var/www/joao
# mkdir /var/www/maria

Além de configurar o servidor Web, precisaremos fazer com que os responsáveis possam acessar os arquivos nas suas respectivas pastas, a fim de atualizar seus sites. A forma mais simples de fazer isso é criar um usuário para cada um e dar acesso a eles via FTP. Mais adiante veremos como configurar o servidor FTP com o Proftpd. Veja que as três coisas acabam se integrando: o Bind resolve os nomes de domínio, o Apache fornece as páginas e o Proftpd permite que os webmasters atualizem os sites.

Acesse agora a pasta "/etc/apache2/sites-available", onde vai a configuração dos sites disponíveis. Comece editando o arquivo "/etc/apache2/sites-available/default", substituindo as linhas:

NameVirtualHost *
<VirtualHost *>

Por:

NameVirtualHost *:80
<VirtualHost *:80>

Essa configuração é necessária para ativar o suporte a SSL para os virtual hosts. Sem ela, além do SSL não funcionar para os virtual hosts (funcionaria apenas para o site default), você precisaria modificar a configuração de cada um, usando sempre "<VirtualHost *>" ao invés de "<VirtualHost *:80>".

Imagine que vamos hospedar os sites "www.joao.com.br" e "www.maria.com.br", usando as duas pastas criadas anteriormente. Criaríamos, então, um arquivo para cada site, contendo o seguinte:

- /etc/apache2/sites-available/joao:

<VirtualHost *:80>
ServerAdmin joao@joao.com.br
ServerName www.joao.com.br
ServerAlias joao.com.br
DocumentRoot /var/www/joao
</VirtualHost>

- /etc/apache2/sites-available/maria:

<VirtualHost *:80>
ServerAdmin maria@gmail.com
ServerName www.maria.com.br
ServerAlias maria.com.br
DocumentRoot /var/www/maria
</VirtualHost>

Note que adicionei uma nova diretiva, a "ServerAlias", que permite que o site seja acessado tanto com, quanto sem o "www". A linha "ServerAdmin" é, na verdade, opcional, contém apenas o e-mail de contato do administrador do site.

Fazendo dessa forma, os logs de acessos serão misturados no log principal do Apache, o "/var/log/apache2/access.log". Para que cada site tenha seus logs separados, você deve adicionar duas linhas adicionais, especificando a localização. Não é recomendável deixar os logs disponíveis ao público, por isso seria interessante usar diretórios diferentes, como em:

<VirtualHost *:80>
ServerAdmin joao@joao.com.br
ServerName www.joao.com.br
ServerAlias joao.com.br
DocumentRoot /var/www/joao/html
ErrorLog /var/www/joao/logs/error.log
CustomLog /var/www/joao/logs/access.log combined
</VirtualHost>

Caso queira ativar o suporte a SSL para os virtual hosts, adicione (depois de fazer a configuração que vimos no tópico sobre virtual hosts) a sessão referente ao SSL dentro da configuração de cada site, indicando corretamente a pasta do site e os arquivos de log. O SSL pode ser tanto ativado para o raiz do site, permitindo que os visitantes visualizem qualquer parte do site usando o "https://", ou utilizar uma pasta separada, onde está a parte de comércio eletrônico do site, por exemplo, como em:

<VirtualHost *:443>
DocumentRoot /var/www/joao/ssl
ErrorLog /var/www/joao/logs/error.log
CustomLog /var/www/joao/logs/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
</VirtualHost>

Neste caso ao acessar o "http://joao.com.br" o visitante visualizará o conteúdo da pasta "/var/www/joao/html", enquanto ao acessar o "https://joao.com.br", visualizará a "/var/www/joao/ssl".

Depois de feita a configuração, ative ambos os sites usando o comando a2ensite, o que criará links para eles na pasta "/etc/apache2/sites-enabled":

# a2ensite joao
# a2ensite maria

Você pode adicionar quantos sites quiser usando esses mesmos passos. Sempre que alterar a configuração, é necessário dar um force-reload, para que as alterações entrem em vigor:

# /etc/init.d/apache2 force-reload

Note que, como todos os sites ficam hospedados no mesmo servidor, a única forma de chegar ao site desejado é fazendo o acesso através do domínio. Se você tentar acessar diretamente o IP do servidor, vai cair no site padrão (configurado através do arquivo "/etc/apache2/sites-available/default"), que, por padrão, usa o raiz da pasta "/var/www".

Esta página default pode ser usada para mostrar alguma publicidade da empresa responsável pelo servidor, ou uma lista dos sites hospedados.

Nenhum comentário:

Postar um comentário