Gérer vos sous-domaines automatiquement sous Apache et Bind

Marre de déclarer votre sous domaine dans Bind et de créer un virtualhost pour chaque sous-domaine ? Voici la solution pour que le dossier toto placer au bon endroit vous donne toto.domaine.tld...

Gestion automatique dans Bind

Dans votre configuration Bind, il vous faut une ligne :

* IN A xxx.xxx.xxx.xxx

xxx.xxx.xxx.xxx est l’ip de votre serveur.

L’étoile permet ainsi de dire que tout url en *.domaine.tld est gérée par le serveur.

Par contre, pour les sous-domaines techniques utilisés pour la déclaration des serveurs NS ou MX, il est recommandé de les déclarer explicitement. La gestion automatique n’empêche pas la déclaration de certains sous-domaines.

Vous obtenez ainsi qqc du genre :

$ttl 38400 domaine.tld. IN SOA ns1.domaine.tld. tech.domaine.tld. (
    2006082301
    10800
    3600
    604800
    38400 )
domaine.tld. IN NS ns1.domaine.tld.
domaine.tld. IN NS ns2.domaine.tld.
domaine.tld. IN MX 10 mail.domaine.tld.
www IN A xxx.xxx.xxx.xxx
mail IN A xxx.xxx.xxx.xxx
dns IN A xxx.xxx.xxx.xxx
    IN A xxx.xxx.xxx.xxx
* IN A xxx.xxx.xxx.xxx

Note : dans webmin, il est interdit par défaut d’utiliser des wildcard (les fameuses “*”). Il faut aller dans la configuration du module pour l’autoriser...

Génération automatique des domaines dans Apache

Il vous faut installer le module vhost_alias :

Note : j’utilise Apache2, pour Apache 1.x il vous faudra vous référencer à la doc adéquat.

a2enmod vhost_alias /etc/init.d/apache2 reload

Il vous reste ensuite à ajouter une directive VirtualDocumentRoot et ServerAlias dans la configuration de votre VirtualHost comme dans l’ex suivant :

<VirtualHost xxx.xxx.xxx.xxx:80>
    DocumentRoot /home/web/domaine.tld/www
    ServerName domaine.tld
    ServerAlias \*.domaine.tld
    VirtualDocumentRoot /home/web/domaine.tld/%1
    CustomLog /var/log/apache2/domaine.tld/access.log combined
    ErrorLog /var/log/apache2/domaine.tld/error.log
</VirtualHost>

Relancez apache :

/etc/init.d/apache2 reload

et le tour est joué.

Ainsi, si j’ajoute un répertoire “toto” dans /home/web/domaine.tld/ alors automatiquement http://toto.domaine.tld est disponible.

Pour que http://domaine.com ne vous renvoie pas une erreur 404, car apache cherche alors /home/web/domaine.com/domaine qui n’existe pas, il vous faut faire la manipulation suivante :

ln -s /home/web/domaine.tld/www /home/web/domaine.tld/domaine

Magique, non ?