6 votes

L'option 'Inclure /path/to/*/live.conf' est-elle possible avec Apache ?

Nous stockons les entrées de VirtualHost dans des fichiers (dev|staging|live).conf dans le dépôt SVN du site.

Par exemple :

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

Il serait pratique de pouvoir les inclure automatiquement, par exemple : Inclure /var/www/vhosts/*/live.conf

Mais ça ne semble pas fonctionner.

Nous l'avons contourné avec un simple script PHP :

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

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

Cependant, j'aimerais simplifier et faire en sorte qu'Apache (2.2.3) fasse le travail sans nécessiter l'étape PHP.

Possible ?

3voto

rbee Points 41

Apache2 ne prend pas en charge les caractères génériques dans les includes. Cependant, vous pourriez l'arranger un peu de la manière suivante :

  • créer un répertoire pour vos configurations (tel que /etc/apache2/myconfigs)
  • lien symbolique de votre configuration vers 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
  • ajouter un "Inclure /etc/apache2/myconfigs" dans votre apache2.conf

Note : à la coupe, j'ai utilisé -f5-6 pour la jonction des délimiteurs (pour fournir quelque chose comme le nom du lien symbolique site1.com_live.conf), mais vous devrez peut-être ajuster cela en fonction de votre propre chemin fs. Note sur note : ce qui précède est pour bash Il faudra peut-être l'adapter à d'autres coquillages.

2voto

quanta Points 49664

J'ai testé, cela donne l'erreur suivante lors de la vérification de la syntaxe :

httpd : Erreur de syntaxe sur la ligne 211 de /etc/httpd/conf/httpd.conf : Les caractères génériques ne sont pas autorisés dans Include /etc/httpd/*/pr.conf

D'après la documentation, à partir de la version 2.0.41, il prend en charge la correspondance par caractères génériques suivant le style Shell (fnmatch()). Mais il semble que cela ne fonctionne qu'avec le fichier (ou le dernier composant du chemin), pas le répertoire.

Testé avec Python, il retourne vrai :

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

2voto

0hex Points 121

mod_perl permet la construction suivante :

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

Elle peut être utilisée à la place de l'option Include directive.

0voto

Uresu Points 1

J'ai eu ce problème pendant un certain temps et j'ai écrit un article de blog sur la façon de le résoudre en appliquant quelques correctifs à apache, j'espère que cela aidera. Cela fonctionne pour moi :)

http://wes.limethinking.co.uk/2011/09/07/apache-include-directive-wildcards-in-directory-names/

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X