Gérer ses sous-domaines avec Bind9 et Apache2
Ce billet ne vous expliquera pas les protocoles DNS et HTTP, certains le feront mieux, et c'est surtout long et complexe. Bref, ce n'est pas du tout le but de ce billet. Ici vous trouverez comment mettre en place votre serveur DNS, et pouvoir gérer ses différents sous-domaines avec Apache, le tout en quelques minutes. Ces manipulations peuvent changer un peu d'une distribution à une autre. Tout a été réalisé sur une Debian. Ce document est principalement un rappel, pour aller plus vite dans le cas où un administrateur doit faire des manipulations rapides. Des liens vers les documentations/explications seront donnés en addition avec ce qui sera dit. Ceci est un document pour administrateurs web pressés.
Tout d'abord, nous allons commencer par installer bind9 et apache2, si cela n'est pas déjà fait. Très simple à faire, juste une petite commande qui vous installera ces deux logiciels ainsi que toutes les dépendances requises.
aptitude install bind9 apache2
Je ne vous expliquerai pas comment configurer apache, sauf concernant la partie sur les sous-domaines, car ce n'est pas, encore une fois, le but de ce HowTo. Nous allons d'abord commencer par Bind. Tout se déroule dans le répertoire /etc/bind. Le fichier qui nous intéresse tout particulièrement est le fichier named.conf.local, qui gère vos domaines et sous domaines. Nous allons ajouter tout à la fin de ce fichier :
zone "pacodastre.org" { type master; file "/etc/bind/zones/pacodastre.org.hosts"; };
Comme vous le voyez je prends l'exemple de mon domaine. « type master; » signifie que tout est sur votre machine. « file "/etc/bind/zones/pacodastre.org.hosts"; » lui dit où se trouve ce qu'il doit lire. Le dossier zones n'existe pas défaut, je l'ai créé pour que ce soit plus simple de distinguer tout ce qui est fichier de configuration personnel de tout ce qui concerne les réglages de Bind. Donc tous les fichiers de zones seront dans le dossier /etc/bind/zones. Donc nous créons le fichier pacodastre.org.hosts avec notre éditeur favori. Et nous mettons ceci à l'intérieur de ce fichier :
$TTL 86400 $ORIGIN pacodastre.org. @ IN SOA r28337.ovh.net. admin.pacodastre.org. ( 2010090601 21600 3600 604800 86400 ) IN NS r28337.ovh.net. IN NS sdns1.ovh.net. IN A 94.23.62.84 www IN CNAME pacodastre.org.
Si vous voulez comprendre ce que signifie chaque élément, je vous invite à lire ce document de RedHat très bien fait, et très compréhensible. La seule chose qu'on pourrait lui reprocher, c'est que l'utilisateur doit changer l'encodage dans les options de son navigateur internet pour voir les caractères spéciaux correctement. La dernière ligne de ce fichier est la plus intéressante. La directive CNAME : en gros si vous cherchez à joindre www.pacodastre.org, cela vous renvoie sur pacodastre.org, c'est juste un alias. Vous allez me dire : « Ok, c'est bien joli, mais ça nous avance à quoi ? À la limite c'est utile pour le www, mais pour les autres sous-domaines, on fait comment ? ». Pour chaque sous-domaine que vous voulez créer, recopier simplement la dernière ligne, en changeant le www par ce que vous voulez, par exemple : « blog IN CNAME pacodastre.org. ». N'oubliez pas le « . » après le nom de domaine, sinon ça ne marchera pas, et vous passerez comme moi des heures à essayer de comprendre pourquoi tel domaine ne marche pas alors que les autres marchent correctement. C'est une des erreurs courantes que l'on fait. RedHat en liste un certain nombre. Ne pas oublier d'incrémenter la date définie sur la 4ème ligne, si vous faites plusieurs modifications dans la même journée, vous devez alors incrémenté le chiffre tout à la fin après la data. Une fois que vous avez ajouter tous vos sous-domaines, vous n'avez plus qu'à redémarrer bind avec la commande suivante :
/etc/init.d/bind9 restart
Voilà pour Bind. Passons maintenant à Apache. Pour le moment, nous avons uniquement créer des alias de notre domaine. Il faut maintenant dire à Apache comment les différencier, pour afficher telle ou telle application web/site internet. Tout se passe dans le fichier /etc/apache2/sites-enable/000-default. Apache doit faire la distinction entre tous domaines/sous-domaines. Pour cela, il y a une directive appelée ServerName, qui sait ce que vous avez tapé dans votre navigateur (ou autre logiciel utilisant HTTP, comme wget par exemple). Tout à la fin de ce fichier, rajoutez simplement ça, en l'adaptant à vos besoins bien évidemment (si vous mettez blog.pacodastre.org, ça risque de ne pas marcher pour vous).
<VirtualHost *:80> ServerName blog.pacodastre.org DocumentRoot "/srv/http/blog" ErrorLog /var/log/apache2/blog_error.log LogLevel warn CustomLog /var/log/apache2/access.log combined </VirtualHost>
Le blog doit se trouver dans /srv/http/blog. Si votre blog se trouve ailleurs, changer le chemin de la directive DocumentRoot. Vous pouvez également changer les chemin des logs. Pour plus d'informations sur les Virtual Hosts, je vous recommande la documentation apache. Une fois ce fichier modifié avec le Virtual Host, vous n'avez qu'à redémarrer apache avec la commande suivante :
/etc/init.d/apache2 restart
Et voilà, vous avez créer votre sous-domaine avec Bind et Apache. Vous n'avez plus qu'à attendre que vos sous-domaines se propagent dans les serveurs DNS pour que cela soit effectif (comptez quelques heures tout de même).
Pour plus d'informations, les liens en vrac :
- Documentation apache (vous aurez l'embarra du choix) : http://httpd.apache.org/docs/2.2/
- Documentation Bind : http://www.bind9.net/manuals
- L'aide de RedHat : http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/fr/ref-guide/ch-bind.html
- Quelques éléments intéressant sur Bind : http://www.zytrax.com/books/dns/ch7/zone.html
- La RFC sur le protocole DNS : http://www.ietf.org/rfc/rfc1034.txt
- La RFC sur le protocole HTTP : http://www.ietf.org/rfc/rfc1945.txt