Ces derniers jours j’ai été confronté deux fois au problème de mise en place de sous domaine sur un serveur dédié, et à chaque fois ce fut une galère. Entre la documentaion trop complète et les différents tutos sur le web qui racontent tout et n’importe quoi j’ai passé plusieurs heures à chercher, modifier, effacer des fichiers de config.

Pour éviter de me reprendre la tête, et en espérant que cela puisse servir à quelques personnes, voici la marche à suivre :

Cas n°1 : Votre domaine pointe déjà vers le serveur dédié, vous voulez juste créer un sous domaine associé à un répertoire

C’est le plus simple, même si, sur le web, on trouve tout et son contraire pour résoudre ce problème simple en apparence …

Vous avez donc un domaine – toto.me – dont le champs A des DNS pointe vers l’IP de votre serveur . Vous voulez créer un sous domaine type sub.toto.me qui pointe vers un dossier quelconque, par exemple /home/toto/www/sub

Donc première chose à faire il faut ajouter un champ CNAME à vos résolutions DNS, afin que sub.toto.me pointe vers toto.me

Une fois que vous avez fait ça, il faut attendre, la propagation des DNS peut prendre du temps, beaucoup de temps. En gros il faut compter 3-4 heures…

Maintenant attaquons nous à Apache, c’est souvent là qu’il y a le plus d’erreurs, de confusions même si, au final, c’est assez simple. Il faut éditer le fichiers /etc/apache2/sites-available/default et y ajouter les lignes suivantes :

<VirtualHost *:80>
 DocumentRoot /home/toto/www/sub
 ServerName sub.toto.me
</VirtualHost>

Ensuite il suffit de redémarrer Apache avec un

sudo /etc/init.d/apache2 restart

et le tour est joué !

 

Cas n°2 : Votre domaine pointe vers un autre serveur et vous voulez rediriger un sous domaine vers un port autre que 80

C’est déjà un peu plus compliqué mais c’est un problème que nous avons rencontré au coworkingLille avec Pierre. L’idée était de mettre un sous domaine de coworkinglille.com sur notre serveur de dev local pour tester une appli Node.Js en production. Pierre à donc créer un sous domaine à coworkinglille qui pointe avec CNAME vers l’IP de notre serveur de dev.

Ensuite il faut rediriger tout ce qui arrive de ce nom de domaine vers l’IP locale et le port 3000 – par défault sous Node.JS.

Encore une fois, il faut éditer le fichiers /etc/apache2/sites-available/default et y ajouter un virtualhost dans lequel on va utiliser le mod_proxy d’Apache

<VirtualHost *:80>
  ServerName sub.coworkinglille.com
 ProxyRequests Off
  ProxyVia Block
  <Proxy *>
    Order deny,allow
    Allow from All
  </Proxy>
  ProxyPass / http://127.0.0.1:3000/
  ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>

ATTENTION : il faut bien mettre ProxyVia et ProxyRequest à block & Off sinon vous transformez votre serveur en OpenProxy, ce qui n’est pas térrible en terme de sécurité !

Normalement, après un redémarrage d’Apache, toutes requêtes vers sub.coworkinglille.com sera redirigé vers les port 3000 local et inversement !

En espérant que ce post vous sera autant utile qu’a moi !

N.B : Ce Tuto est valable pour un serveur Ubuntu mais il n’y pas de raisons que cela ne fonctionne pas avec d’autres distributions, faites juste attention à installer les paquets et dépendances si besoin.