12 de abril de 2007

Virtual Host Dinâmico no Apache

Opa,

Segue mais uma dica técnica nesse blog, ou seja, serve o mesmo que falei na dica técnica postada anteriormente, quem não souber do que se trata pode pular esse post.

Vamos ao que interessa, já tinha ouvido falar (valeu Enderson) sobre a possibilidade de se usar Hosts Virtuais dinâmicos no Apache, mas na tentativa da mesma pessoa que me falou (pela "enorme" paciência que ele tem) não conseguiu concluir ou não conseguiu aplicar da maneira como queria na época, não lembro no momento. Meses se passaram e após ver algo parecido na Internet resolvi tentar fazê-lo.

Mas que diabos é Virtual Host Dinâmico no Apache???
Espero que os que continuaram a ler esse post saibam o que é um Virtual Host, portanto não vou falar sobre isso nesse post, se não souberem o que é procurem! :-P
O Dinâmico significa que toda vez que precisarmos criar um Virtual Host não seja necessário editar os arquivos do Apache, falando por alto ficaremos somente nessa definição.

Mas como assim??? Como funciona esse bagaça???
Bem, o Virtual Host Dinâmico funciona mais ou menos da seguinte maneira, criamos um arquivo de vhost e ao invés de usar a opção ServerName que definiria o nome do host virtual, trabalhamos com variáveis e deixamos o Apache se virar.

Dê exemplos oras!!!
Lógico, mas antes vamos configurar o apache para atender as nossas necessidades.
By Gentoo:
- Edite o arquivo /etc/conf.d/apache2 e na variável APACHE2_OPTS adicione:
APACHE2_OPTS="... D DYNAMIC_VHOSTS"
- Edite o arquivo /etc/apache2/httpd.conf, procure por vhost_alias_module e descomente a linha do mesmo, deverá ficar assim:
LoadModule vhost_alias_module modules/mod_vhost_alias.so

By OpenSuSE 10.2:
- Edite o arquivo /etc/sysconfig/apache2 e na variável APACHE_MODULES adicione:
APACHE_MODULES="... vhost_alias"

Exemplos:
Crie um arquivo vhost (/etc/apache2/vhosts.d/00_vhost-dinamico.conf) e adicione o seguinte:
NameVirtualHost *:80
UseCanonicalName Off
LogFormat "%V %h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\"" dynamic_vhosts
CustomLog /var/log/apache2/access_log dynamic_vhosts

<VirtualHost *:80>
<Directory "/srv/www/vhosts">
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>

<IfModule mod_vhost_alias.c>
# www.example.com --> /web/www.example.com
# a.www.example.com --> /web/a.www.example.com
# example.com --> /web/example.com
VirtualDocumentRoot /srv/www/vhosts/%0.0
VirtualScriptAlias /srv/www/vhosts/%0.0/cgi

<DirectoryMatch "^/srv/www/vhosts/[^/]+/cgi">

AllowOverride None
Options ExecCGI
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</DirectoryMatch>

</IfModule>

</VirtualHost>

Se estiver usando Gentoo lembre-se de adicionar no seu arquivo de configuração, logo após NameVirtualHost *:80 a opção IfDefine DYNAMIC_VHOSTS e no final do arquivo /IfDefine.
Feito isso basta reiniciar o apache e criar um diretório dentro de /srv/www/vhosts como os exemplos acima e deverá funcionar, por exemplo, se criarmos o diretório exemplo.com e o DNS estiver apontando para esse host, basta abrir o browser e digitar exemplo.com que deverá aparecer algo (lógico lembre-se de criar um index dentro do diretório), se criarmos outro diretório www.meusite.com.br e o DNS estiver apontando para esse host, basta abrir o browser e digitar www.meusite.com.br que deverá funcionar também, simples não?

Bem, para quem estiver curioso em saber outros exemplos de configuração segue o endereço do site do apache, onde achei o que precisava LINK

Um comentário:

Fernando Scherrer disse...

Haw!

  Achei seu post sem querer, e, como eu sempre quis implementar algo do tipo, não deu outra.
  Implementei num gentoo paravirtualizado que estamos acabando de por pra funcionar aqui.
  Funcionou de boa, só tive que alterar as portas porque a 80 aqui é de outro servidor.
  Valeu pelo post.

falowz!?