Fix DOCUMENT_ROOT no Apache usando mod_vhost_alias
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
Comentários Recentes