Sous-domaine virtuel sur un serveur web en local sans internet

Sous-domaine virtuel sur un serveur web en local sans internet

Description

Bonjour,

Voici un petit article suite à un problème auquel j'ai été confronté.

Je développe dans le RER sur mon portable, donc je ne dispose pas de connexion à internet.

J'utilise pour développer mon site Web (PHP/Mysql) en local "Wamp" avec comme nom de domaine "localhost"

Jusqu'à la pas de problème, mais lorsque j'ai voulu utiliser des sous-domaines virtuel je n'arrivais pas à les créer et les faire fonctionner avec localhost

J'ai fini par réussir à créer un sous domaine grâce au fichier Host de Windows, mais ma gestion d'identification (cookies) ne fonctionne pas, il considérait le sous domaine comme un domaine à part entière.

Après de longue recherche qui n'ont abouti à rien, je me suis dit pourquoi ne pas créer mon propre serveur DNS en local afin d'utiliser un nom de domaine.

Ce qui n'est pas si facile que ça, c'est donc pour cela que je fais ce petit article.

Concernant le serveur DNS, je n'ai trouvé que deux logiciels pour Windows XP :
- Simple DNS Plus (Payant - 14 jours d'évaluation)
- BIND (Gratuit)

Personnellement j'ai d'abord utilisé Simple DNS Plus mais il n'est gratuit que 14 jours donc je suis passé à BIND assez rapidement.

Pour cet article j'utiliserai comme exemple le nom de domaine "mydomaine.tld"

Installation de BIND

Premièrement télécharger la dernière version de BIND (fichier zip)
Décompresser le fichier zip
Dans le répertoire vous trouverez le fichier d'installation de BIND "BINDInstall.exe"
Lancer l'installation, voici les paramètres que j'utilise :

  • Target Directory : c:\named
  • Service Account Name : named
  • Service Account Password : celui que vous désirez mais il en faut un
  • Confirm Service Account Password : confirmer votre mot de passe
  • Cocher : Automatic Startup
  • Cocher : Keep Config Files After Uninstall
  • Décocher : Start BIND Service After Install

Voici ce que la donne :
Cliquez sur Install, il va vous demander si vous voulez créer le répertoire named car il n'existe pas cliquez sur oui
Plusieurs fenêtres vont s'ouvrir et se fermer, le message "BIND Installation completed successfully" vous indiquera que l'installation est terminée
Vous pouvez fermer l'installeur.

Configuration de BIND

- Créez le répertoire "c:\named\zones"
- Téléchargez les fichiers "named.conf" et "mydomaine.tld.dns" et les sauvegarder aux emplacements suivant :

  • c:\named\etc\named.conf
  • c:\named\zones\mydomaine.tld.dns

- Ouvrez une console (Windows + R --> cmd) et tapez les commandes suivantes :

  • cd c:\named\bin
  • rndc-confgen -a
  • rndc-confgen > ..\etc\rndc.conf
  • exit

- Ouvrez le fichier "c:\named\etc\rndc.conf" avec Notepad
- Sélectionnez et coupez la section en dessous de la ligne suivante :
# Use with the following in named.conf, adjusting the allow list as needed:

- Sauvegardez et fermez le fichier "rndc.conf"
- Ouvrez le fichier "c:\named\etc\named.conf" avec Notepad
- Collez le contenu du presse-papier à la fin du fichier
- Retirez les # devant les nouvelles lignes
- Supprimez la ligne "End of named.conf"
- Sauvegardez et fermez le fichier "named.conf"

Configuration de votre zone

- Ouvrez le fichier "c:\named\etc\named.conf" avec Notepad
- Remplacez "mydomaine.tld" par votre domaine
- Sauvegardez et fermez le fichier "named.conf"
- Renommez le fichier "c:\named\zones\mydomaine.tld.dns" en remplaçant "mydomaine.tld" par votre domaine
- Ouvrez ce fichier avec Notepad
- Remplacez "NomOrdinateur" par le nom de votre ordinateur, faites bien attention de laisser le . après le nom de votre ordinateur
- Sauvegardez et fermez le fichier

Lancement de BIND

- Cliquez droit sur "Poste de travail" et cliquez sur "Gérer"
- Sélectionnez le noeud "Services et applications" puis "Services"
- Trouvez le service "ISC Bind" et cliquez droit dessus et sélectionnez "Démarrer"

Si le démarrage ne réussit pas, la description des erreurs se trouve dans "Observateur d'événements" puis "Application"

Créer un Batch afin de reloader BIND

A chaque modification ou ajout des zones, il faudra relancer le BIND afin qu'il prenne en compte celle ci. Pour économiser plusieurs manipulations voici un "bacth" permettant de réaliser le relaod ou vous pouvez le créer :

Créez un fichier texte et nommé le "reload bind.bat" sur votre bureau avec les éléments ci-dessous :
@echo off
c:\named\bin\rndc reload
pause

Installation d'une carte de bouclage Microsoft

Et oui, même si vous avez installé un serveur DNS, vous ne pouvez le joindre qu'à travers un réseau, donc nous allons simuler un réseau juste pour pouvoir contacter notre serveur DNS.
Pour cela nous allons installer une carte de bouclage Microsoft
Allez dans le panneau de configuration, puis cliquez sur "Ajout de matériel"
Faites "Suivant >" et laisser le programme rechercher.
A la question "Avez-vous déjà connecté ce matériel à votre ordinateur" cliquez sur "Oui, ..." puis sur "Suivant >"
Sélectionnez dans la liste "Matériel installé :"
- Ajouter un nouveau périphérique matériel (tous en bas de la liste)
Et encore "Suivant >"
Sélectionnez "Installer le matériel ..." et encore "Suivant >"
Sélectionnez "Cartes réseau" et encore "Suivant >"
Choisir "Microsoft" dans la liste des fabricants et "carte de bouclage Microsoft" dans la liste Carte réseau et encore "Suivant >"
Et enfin le dernier "Suivant >" pour installer la carte
Une fois la carte installée, cliquez sur "Terminer"
Dans votre TaskBar, le petit icône de recherche de réseau a du apparaitre : puis au bout d'un moment vous informer que la connexion est limitée.

Configuration de la carte de bouclage

Nous allons maintenant configurer la carte de bouclage afin qu'elle prenne en compte notre serveur DNS.

Allez dans le "Panneau de configuration" puis "Connexions réseaux"
Vous retrouvez votre Carte de bouclage Microsoft
Cliquez droit dessus et sélectionner "Propriétés"

Sélectionnez dans la liste "Protocole Internet (TCP/IP)" et cliquer sur "Propriétés"
Personnellement j'utilise l'adresse IP 192.168.0.50 qui est une classe C mais vous pouvez en utiliser une autre

Voici les paramètres à remplir :

Cocher : Utiliser l'adresse IP suivante
- Adresse IP : 192.168.0.50
- Masque de sous-réseau : 255.255.255.0
- Passerelle par défaut : Laisser vide
- Cocher : Utiliser l'adresse de serveur DNS suivante
- Serveur DNS préféré : 127.0.0.1
Voilà ce que cela donne :

Puis cliquez sur "OK", puis "Fermer"

Et voila la carte est configurée pour s'adresser a notre serveur DNS local.

Configuration de Wamp

Je vais passer outre volontairement l'installation de Wamp (il existe plein de tutos pour ça sur internet Google est votre ami ;)

Ouvrez le fichier "\wamp\bin\apache\Apache2.2.11\conf\extra\httpd-vhosts.conf" avec Notepad

Vérifiez bien que la valeur "NameVirtualHost" soit bien a *:80 ce qui donne :
#
# Use name-based virtual hosting.
#
NameVirtualHost *:80

Ensuite nous allons créer un VirtualHost pour notre domaine, pour cela il vous suffit de copier les lignes ci-dessous :
<VirtualHost *:80>
ServerName www.mydomaine.tld
ServerAlias mydomaine.tld *.mydomaine.tld
DocumentRoot "D:\www\mydomaine"
</VirtualHost>

La valeur de "DocumentRoot" correspond au répertoire contenant votre site Web

Sauvegardez et fermez le fichier "httpd-vhosts.conf"

Ouvrez le fichier "\wamp\bin\apache\Apache2.2.11\conf\httpd.conf" avec Notepad
Recherchez la ligne "#Include conf/extra/httpd-vhosts.conf" et retirez le # de la ligne
Sauvegardez et fermez le fichier "httpd-vhosts.conf"

En passant par l'administration de Wamp redémarrez tous les services

Test

Et voila normalement votre configuration doit fonctionner

Vous pouvez tester avec votre navigateur préféré en tapant l'adresse http://www.mydomaine.tld/ et vous tomberez sur votre site web

Sous-domaine Virtuel en URL-Rewriting

Voila la partie qui est à l'origine de mon problème, je souhaitai donc faire des sous-domaines virtuel, c'est à dire :
Par exemple l'adresse machin.mydomaine.tld pointe vers une page de mon site web et m'affiche "machin", vous allez me dire c'est possible grâce à un sous domaine normal.
Mais ce que je voulais aussi c'est que "truc", "bidule", etc en fasse de même.
Dans mon cas, c'est surtout pour créer des sous domaine correspondant à des utilisateurs donc une liste dynamique.

Donc premièrement nous devons retoucher la zone DNS de notre nom de domaine "mydomaine.tld" afin que lorsqu'un sous-domaine soit demandé la demande soit redirigée vers notre site web.
Afin de réaliser cette opération nous devons rajouter un * au A de la zone, attention certain hébergeur (notamment 1and1) n'accepte pas de faire ça sur votre nom de domaine)

Ouvrez le fichier de votre zone et rajouter la ligne suivante avant la ligne "www CNAME @" :
* A 127.0.0.1

Sauvegardez et fermez le fichier

Reloadez BIND soit avec le Bacth de reload (Partie 5) ou lancez la commande c:\named\bin\rndc reload dans une console

Vous pouvez désormais tester en tapant dans votre navigateur n'importe qu'elle sous domaine cela vous donnera la page d'accueil de votre site web.

C'est maintenant que nous allons passer a l'URL Rewriting

Editez ou créez le fichier .htaccess à la racine de votre site

Et ajoutez les lignes suivantes :

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.mydomaine\.tld
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomaine\.tld
RewriteRule ^$ /test/index.php?sous_domaine=%1
RewriteRule ^([^.]+)\.html$ /test/index.php?sous_domaine=%1&page=$1 [L]

Ces règles vont permettre de re-router tous les sous domaine sauf www vers la page index.php du répertoire "test"
Ainsi que de préciser la page demandée, si une page est demandée après le domaine.

Exemple :
http://profils.mydomaine.tld/ = http://www.mydomaine.tld/test/index.php?sous_domaine=profils
http://profils.mydomaine.tld/utilisateur.html = http://www.mydomaine.tld/test/index.php?sous_domaine=profils&page=utilisateur

Et voila vos sous domaine fonctionne maintenant, a vous de vous amuser !

j'espère que ce petit article a été assez clair et que je ne vous ai pas trop perdu !!!

PS : Désolé pour les faute d'orthographe, ce n'est pas mon fort !

Ce document intitulé « Sous-domaine virtuel sur un serveur web en local sans internet » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.