Arquivo

Textos com Etiquetas ‘mod_vhost_alias’

Fix DOCUMENT_ROOT no Apache usando mod_vhost_alias

10, setembro, 2009 Sem comentários

Opa,

Quem usa o módulo mod_vhost_alias do Apache (ver post sobre esse assunto) e utiliza a variável DOCUMENT_ROOT já deve ter sofrido um pouco (assim como eu) para tentar encontrar a solução para esse problema, uma das soluções é utilizando a opção “php_admin_value auto_prepend_file” para ajustar o DOCUMENT_ROOT, mas isso traz alguns problemas, primeiro é um modo “feio” e segundo só serve para projetos em PHP, quando usarmos Ruby on Rails por exemplo não irá funcionar, então como solucionar? Pesquisando no bugzilla do Apache encontrei a solução, um patch que ajusta a variável DOCUMENT_ROOT de acordo com a variável VirtualDocumentRoot definida no arquivo de configuração, vamos a solução!

Antes de iniciarmos, vamos instalar o pacote que para criar o rpm:

# yum install rpm-build

Agora verifique qual a versão do seu servidor Apache (no meu caso utilizei a versão do patch para 2.2.2):

# httpd -v
Server version: Apache/2.2.3

Faça o download do patch no bugzilla do Apache https://issues.apache.org/bugzilla/show_bug.cgi?id=26052

Faça também o download do pacote src referente a versão do seu Apache e instale-o:

# wget -c http://mirror.centos.org/centos/5/os/SRPMS/httpd-2.2.3-22.el5.centos.src.rpm
# rpm -Uvh /backup/packages/httpd-2.2.3-22.el5.centos.src.rpm

Acesse o diretório dos fontes e descompacte o arquivo httpd-2.2.3.tar.gz:

# cd /usr/src/redhat/SOURCES
# tar -xvzf httpd-2.2.3.tar.gz

Acesse o diretório onde encontra-se o módulo mod_vhost_alias.c:

# cd httpd-2.2.3/modules/mappers/

Aplique o patch informando o local onde fez o download do mesmo (acima):

# patch < /root/mod_vhost_alias.c.diff

Volte ao diretório dos fontes (SOURCES) e compacte o diretório httpd-2.2.3 conforme abaixo:

# cd /usr/src/redhat/SOURCES
# tar -cvzf httpd-2.2.3.tar.gz httpd-2.2.3

Acesse o diretório SPECS e gere o pacote:

OBS.: Na minha compilação o sistema solicitou as seguintes dependências xmlto pcre-devel distcache-devel, instale-as via yum antes de compilar (Ex.: # yum install xmlto pcre-devel distcache-devel)!

# cd /usr/src/redhat/SPECS
# rpmbuild -bb httpd.spec

Como não precisamos de todo o pacote, acesse o diretório tmp para descompactar o rpm criado e copiar somente o módulo que desejamos:

OBS.: No meu sistema utilizei o caminho /usr/lib64 por ser 64bits, use o padrão (/usr/lib) caso não seja o seu caso!

# cd /tmp/
# rpm2cpio /usr/src/redhat/RPMS/x86_64/httpd-2.2.3-22.x86_64.rpm | cpio -d -i
# mv /usr/lib64/httpd/modules/mod_vhost_alias.so /usr/lib64/httpd/modules/mod_vhost_alias.so.orig
# mv /tmp/usr/lib64/httpd/modules/mod_vhost_alias.so /usr/lib64/httpd/modules/mod_vhost_alias.so

Edite o arquivo com os hosts virtuais dinâmicos e adicione a opção SetVirtualDocumentRoot que faz a “mágica”:

# vim /etc/httpd/conf.d/00_vhost.conf

...
<IfModule mod_vhost_alias.c>
SetVirtualDocumentRoot on
...
</IfModule>
...

Reinicie o Apache e faça seus testes!

# /etc/init.d/httpd restart

Abraço!

Fonte: http://www.edula.com/blog/?m=200603
Patch: https://issues.apache.org/bugzilla/show_bug.cgi?id=26052

Categories: Linux Tags: , , ,