O 'Include /path/to/*/live.conf' é possível com o Apache?

6

Armazenamos as entradas do VirtualHost nos arquivos (dev | staging | live) .conf dentro do repositório SVN do site.

Por exemplo:

/var/www/vhosts/site1.com/live.conf
/var/www/vhosts/site2.com/live.conf

Seria útil poder incluí-los automaticamente, como: Inclua / var / www / vhosts / * / live.conf

Mas isso não parece funcionar.

Nós trabalhamos com um script PHP simples:

$vhosts = '';
foreach (glob('/var/www/vhosts/*/vhost/dev.conf') as $filename) {
    $vhosts .= "\nInclude $filename";
}

file_put_contents('/var/www/vhosts/vhosts.conf', $vhosts);

No entanto, eu adoraria simplificar e fazer com que o Apache (2.2.3) fizesse o trabalho sem precisar da etapa PHP.

Possível?

    
por Wes Hooper 16.08.2011 / 15:33

4 respostas

3

o apache2 não suporta caracteres curinga em includes. No entanto, você poderia organizar um pouco da seguinte maneira:

  • crie um diretório para suas configurações (como / etc / apache2 / myconfigs)
  • crie uma ligação simbólica da sua configuração dinamicamente para o apache2:
rm -f /etc/apache2/myconfigs/*
for i in $(find /var/www/vhosts/*/live.conf); do \
tempfn=$(echo $i|cut -d/ -f5-6|sed s,/,_,);  \
ln -s $i /etc/apache2/myconfigs/$tempfn.conf \
done
  • adicione um "Include / etc / apache2 / myconfigs" no seu apache2.conf

Nota: no cut, eu usei -f5-6 para unir o delimitador (para fornecer algo como o nome do symlink site1.com_live.conf), mas você pode ter que ajustar isso de acordo com o seu próprio caminho fs. Nota na nota: o acima é para bash , pode precisar de adaptação para outros shells.

    
por 16.08.2011 / 16:12
2

Eu testei através do erro abaixo ao verificar a sintaxe:

httpd: Syntax error on line 211 of /etc/httpd/conf/httpd.conf: Wildcard patterns not allowed in Include /etc/httpd/*/pr.conf

De acordo com a documentação, da versão 2.0.41, ele suporta o curinga correspondente ao estilo shell (fnmatch ()). Mas parece que só funciona com o arquivo (ou o último componente no caminho), não o diretório.

Testando com python, ele retorna true:

In [1]: import fnmatch

In [2]: fnmatch.fn
fnmatch.fnmatch      fnmatch.fnmatchcase  

In [2]: fnmatch.fnmatch('/etc/httpd/site1.com/live.conf','/etc/httpd/*/live.conf')
Out[2]: True
    
por 16.08.2011 / 16:27
2

mod_perl permite a seguinte construção:

<Perl>
    foreach $file (glob '/etc/httpd/conf.d/vhosts/*/live.conf') {
        push @Include, $file;
    }
</Perl>

Isso pode ser usado no lugar da diretiva Include .

    
por 02.10.2011 / 23:44
0

Eu tive esse problema por um tempo e escrevi uma postagem no blog sobre como corrigi-lo, aplicando alguns patches para o apache, espero que ajude. Eu trabalho para mim:)

link

    
por 07.09.2011 / 13:38

Tags