Comment créer ses virtuals host avec WAMP ?

Publié le 03 juin 2011 par Capmarketer

Logo WampServer

1. Audience ciblée

Ceci est un court Howto pour développeurs Web souhaitant gérer indépendemment de multiples sites web, la plupart du temps sur leur propre PC, en utilisant un environnement soit LAMP soit WAMP.

2. Introduction

En effet, de nombreux développeurs web commencent par développer un seul site et on leur demande rapidement d’en développer un ou plusieurs autres, et ce qu’ils font naturellement dans cette situation est créer un sous-répertoire sur leur PC de développement pour héberger le nouveau site, mais ceci entraîne quelques désavantages, le principal étant l’impossibilité d’utiliser des références absolues dans leur code car le site est destiné à être déplacé en production d’une racine étant un sous-répertoire vers une racine étant la racine du serveur. Alternativement, ce qu’ils font parfois est reproduire leur environnement de développement sur le site de production avec le désavantage de présenter aux internautes un niveau d’indentation inutile dans les URL’s.

Un autre situation dans laquelle ce howto peut être utile est celle des développeurs web héritant d’un seul site d’entreprise présentant une arborescence extrêment boisée incluant de nombreuses fonctionalités hétérogènes telles que, entre autres, le site de l’entreprise, un extranet pour les clients, un extranet pour les employés, un webmail, un agenda partagé, etc… le tout sous la racine du site principal. Cette situation se présente la plupart du temps lorsque l’infrastructure a été développée depuis plusieurs années par de multiples développeurs, dont certains prestataires externes. Donc, lorsque le site s’étoffe tellement et rapidement avec trop peu de contrôle, vu du point de vue de l’administrateur système préposé à la gestion du serveur sous-jacent, cela se transforme souvent en cauchemar lorsque le besoin se fait sentir de déplacer l’infrastructure sur un autre serveur, car plus personne ne sait précisément ce qui se trouve sous la racine du site et l’on se retrouve obligé de déplacer l’environnement complet d’un seul coup, ce-inclu les bases de données sous-jacentes et possiblement d’autres extensions, avec le risque très réel de voir le système complet s’effondrer d’un seul spectaculaire coup également.

Donc, ce qui suit est une proposition très simple à destination de ces devéloppeurs web, qui consiste en ceci: au lieu d’utiliser un seul environnement de développement ressemblant à ceci:

http://localhost/client-a/

http://localhost/client-b/

de les aider à utiliser un environnement de développement ressemblant, en sus et non pas en remplacement du précédent, à ceci:

http://client-a.local/

http://client-b.local/

en utilisant les capacités de gestion des hôtes virtuels de leur installation locale de Apache sans nécessité particulière de déplacer leur code source vers d’autres emplacements et sans les empêcher de continuer à utiliser leur première forme d’environnement de développement (le tout sous localhost dans des sous-répertoires), les deux emplacements devenant dorénavant disponibles.

3. WAMP

A la date d’aujourd’hui (2007) le plateau (n.d.l.t. ‘tray) de WAMP leur permet aisément d’enclancher les fonctionalités d’hôtes virtuels d’Apache, mais ne permet pas de diviser l’environnement de développement en sites web multiples.
Donc, vous aurez besoin d’utiliser votre éditeur favori, que ce soit le bloc notes ou n’importe quel autre, pour effectuer de très simples changements aux configurations d’Apache et de votre pile TCP/IP.

3.1. Le fichier hosts

Ce fichier est situé sous « %SystemRoot%\system32\drivers\etc », ce qui la plupart du temps signifie « C:\WINDOWS\system32\drivers\etc ».

Par défaut, le contenu consiste en un bon nombre de lignes de commentaire commençant par un # (à ce propos, vous pouvez ajoutez les vôtres de la même façon si vous le souhaitez sur des lignes commençant par un #) et une seule ligne ressemblant à ceci:

127.0.0.1 localhost

ce qui signifie que, lorsque votre navigateur web essaye d’atteindre le nom spécial d’hôte ‘localhost’, le système lui retournera l’adresse IP spéciale 127.0.0.1 que le navigateur va effectivement utiliser pour joindre votre server Apache tournant sur votre PC. Ne supprimez ou commentez PAS cette ligne, sans quoi de nombreuses fonctionalités de votre PC pourraient se briser et votre système pourrait s’en trouver fortement endommagé. Ce fichier fait partie de ce que l’on appelle la pile TCP/IP de votre PC et est par conséquent important car il est interrogé avant le DNS.

Par contre, ce que vous pouvez faire sans trop de craintes dans ce fichier est d’y ajouter des lignes ou des aliases sur le nom d’hôte spécial ‘localhost’.
Pour cela, il est vivement conseillé d’utiliser une extension spéciale, à savoir ‘.local’ aux noms que vous ajouterez de manière à éviter les conflits avec les véritables noms Internet. Donc, vous devez éviter de mettre des noms d’hôtes tels que p. exple. www.masociete.com pointant vers une adresse de type 127.x.y.z sans quoi vous ne seriez plus à même d’atteindre le site de votre société car toutes les adresses IP commençant par 127 renvoyent à votre propre PC et parce que ce fichier est interrogé avant le DNS.
Donc, de grâce, utilisez seulement des extensions .local pour fonctionner en toute sécurité.

A présent nous avons en réalité 2 possibilités, soit ajouter sur la ligne:

127.0.0.1 localhost

les alias:

client-a.local client-b.local

separés par des espaces ou tabulations du début et entre les mots de manière à ce qu’elle ressemble à ceci:

127.0.0.1 localhost client-a.local client-b.local

ou, une autre possibilité (les différences sont très subtiles et vous ne devriez pas en avoir besoin à ce stade, donc choisissez la méthode que vous préférez) est d’ajouter des lignes telle que:

127.1.2.3 client-a.local
127.1.2.4 client-b.local

Vous pouvez utiliser n’importe quel nombre plus petit que 256 après le premier 127. mais le dernier nombre ne peut être 0 ni 255. Notez que d’autres valeurs ont des significations particulières mais considérons que les valeurs entre 1 et 126 sont un excellent choix. De toutes façons, si vous gérez plus de 126 sites, je soupçonne que vous n’avez pas besoin de lire ce howto car vous connaissez déjà tout ceci ;-) Je ne vous conseillerais pas davantage de dupliquer la ligne 127.0.0.1: soit vous placez les alias sur la première ligne, soit vous créez de multiples lignes avec de multiples adresses IP sur ce que l’on appelle l’interface de la boucle locale (n.d.l.t. ‘loopback’) ( adresses commençant par 127 et pointant seulement vers votre PC).

C’est tout pour le fichier hosts et dorénavant votre navigateur peut joindre des URL’s telles que:

http://client-a.local/

A présent assurons nous qu’Apache répond à ces requêtes de la manière qui vous convient.

3.2 Chargement du module d’hôtes virtuels de Apache

Par défaut (à la date d’aujourd’hui, 2007) WAMP ne l’a pas activé lors de l’installation, donc, de manière à l’activer, vous pouvez cliquer sur l’icône du serveur WAMP dans votre plateau système (n.d.l.t. ‘systray’) (côté droit de votre barre de tâches de Windows), aller dans le menu:

Apache > Apache Modules

faire défiler un peu vers le bas si nécessaire à l’aide de la petite flèche noire en bas et cliquer sur la ligne:

vhost_alias_module

de manière à ce qu’un V apparaissent à sa gauche la prochaine fois que vous affichez ce menu.

C’est tout. Nous ne redémarrerons pas encore Apache maintenant car nous devons encore effectuer quelques autres modifications à sa configuration.

3.3 Création de confettis de fichiers de configuration Apache pour la gestion des hôtes virtuels et création du répertoire destiné à les héberger.

Historiquement, la plupart des serveurs originaires du monde *nix tels qu’Apache avaient un seul fichier de configuration mais à présent, la tendance s’affirme d’avoir un fichier de configuration principal et de nombreux petits morceaux de configurations répartis au travers de plusieurs fichiers qui sont chargés par le fichier principal. Ceci peut en effet s’avérer utile.

Sur une installation WAMP par défaut (à la date d’aujourd’hui, je répète), la dernière ligne de votre fichier de configuration d’Apache que vous pouvez ouvrir avec le bloc notes au départ de votre icône de plateau en sélectionnant le menu:

Apache > httpd.conf

est une directive d’inclusion qui charge des confettis de fichiers de configuration contenant les alias (PHPMyadmin, etc…), ce qui constitue une autre technique assez pratique dont nous parlerons brièvement plus bas.

Donc, à présent que vous l’avez ouvert, je vous suggérerais d’y ajouter une ligne telle que:

Include "C:\wamp\virtual"

ou, si vous craignez que ce sous-répertoire puisse être utilisé à l’avenir par l’équipe de développement de WAMP à d’autres fins, disons par exemple:

Include "C:\wamp-virtual"

A présent il vous est nécessaire de créer ce répertoire ou sous-répertoire qui n’existe pas encore. Utilisez l’explorateur de Windows à cette fin et veuillez le laisser ouvert à cet emplacement car nous allons à présent y créer quelques fichiers. Pour ce faire, utilisez votre éditeur de fichiers préféré, qu’il s’agisse du bloc-notes ou de n’importe quel autre et créez un fichier appellé:

000-default.conf

dans lequel vous écrivez au minimum ceci:

NameVirtualHost *

<VirtualHost *>

	ServerName localhost
	DocumentRoot "c:\wamp\www\"

	<Directory "c:\wamp\www\">
		AllowOverwrite all
		Order deny,allow
		Allow from 127.
	</Directory>

</VirtualHost>

Sauvegardez le fichier et maintenant créez en un autre nommé:

001-client-a.conf

dans lequel vous écrivez au minimum ceci:

<VirtualHost *>

	ServerName client-a.local
	DocumentRoot "c:\wamp\www\client-a\"

	<Directory "c:\wamp\www\client-a\">
		AllowOverwrite all
		Order deny,allow
		Allow from 127.
	</Directory>

</VirtualHost>

Sauvegardez le fichier et maintenant créez en un troisième nommé:

002-client-b.conf

dans lequel vous écrivez:

<VirtualHost *>

	ServerName client-b.local
	DocumentRoot "c:\wamp\www\client-b\"

	<Directory "c:\wamp\www\client-b\">
		AllowOverwrite all
		Order deny,allow
		Allow from 127.
	</Directory>

</VirtualHost>

Ceci devrait suffire et vous pouvez à présent redémarrer Apache à partir de votre icône de plateau en sélectionnant:

Restart services.

Patientez quelques (dizaines de) secondes et ensuite ouvrez quelques onglets dans votre navigateur préféré (Firefox) et ouvrez les URL’s suivantes:

http://localhost/client-a/

http://client-a.local/

Si vous avez seulement un site statique qui ne contient pas de références absolues, les deux pages doivent être identiques.

Veuillez noter les conventions de nomination 000-, 001-, etc… qui sont supposées assurer que celle contenant NameVirtualHost * est chargée la première car, si je ne me trompe pas, ellles sont chargées par ordre alphabétique.

3.4 Le chemin d’inclusion de PHP (n.d.l.t. include path)

Si vous avez des pages utilisant des instructions include, include_once, require ou require_once qui incluent de nombreuses autres pages PHP qui peuvent ne pas se trouver dans le même répertoire ou un quelconque sous-répertoire, celles-ci pourraient ne pas être trouvées sur le site .local pour cause d’absence de ce sous-répertoire. Mais ne vous tracassez pas, il existe une pléthore de solutions possible pour contourner ceci, en fonction du type de problème.

3.4.1 Pages inclues utilisant des chemins absolus.

Votre site pourrait être constitué de pages PHP contenant des instructions include ou require utilisant des chemins codés en dur soit de la forme:

include '/client-a/page.php';

soit:

include $_SERVER['DOCUMENT_ROOT'] . '/client-a/page.php';

soit encore (mais moins répandu je suppose):

include 'c:\wamp\www\client-a\page.php';

Si vous utilisez la dernière forme, je vous conseillerais de vous promener parmi vos pages et de changer votre style de référencement car votre site web n’est pas portable du tout avec cette sorte de références. Mais si vous utilisez l’une des 2 premières, vous pouvez temporairement contourner l’absence du sous-répertoire client-a sur le site client-a.local en utilisant un alias dans le confetti de configuration d’Apache ( les alias sont aussi utilisés par WAMP pour permettre de stocker phpmyadmin ailleurs que sous c:\wamp\www\phpmyadmin tout en préservant la possibilités d’y accéder via l’URL http://localhost/phpmyadmin/)

Pour cela, insérez dans:

001-client-a.conf

à l’intérieur des balises ouvrante et fermantes <VirtualHost> mais hors des balises <Directory> (de préférence avant) la ligne suivante:

	Alias /client-a/ "c:\wamp\www\client-a\"

et redémarrez WAMP de la manière présentée plus haut. Ceci devrait vous dépanner pour l’instant. Nous discuterons plus bas de la manière d’optimiser vos techniques d’inclusions.

3.4.2 Inclusions portables

En fait, pour s’assurer que vos votre site et pages PHP soient bien portables, il existe différentes techniques.

3.4.2.1 PHP.INI

Vous pouvez l’ouvrir à partir du plateau du serveur WAMP dans le bloc notes et chercher la ligne:

;include_path=".:c:\php\includes"

Vous pouvez la décommenter en supprimant le point-virgule de début de ligne et inscrire entre les guillemets un répertoire de telles façons que cela à ressemble à disons ceci:

include_path=".:c:\wamp\library"

ou

include_path=".:c:\wamp-library"

Ensuite créez ce répertoire qui n’existe pas encore et, à l’intérieur, un sous-répertoire que nous appellerons par exemple ‘mesincludes’.
Ensuite déplacez-y toutes vos pages de librairies et, maintenant, commencez dans toutes vos pages à remplacer votre style d’inclusion actuel par le suivant:

include 'mesincludes/pages.php';

Ceci vous permettra de minimiser les risques d’occurence de ce que l’on appelle les conflits dans l’espace de noms (n.d.l.t. ‘namespace clashes’) où il y a plusieurs répertoires contenant ‘page.php’, certaines d’entre elles écrites par vous, d’autres pas.
Comme le répertoire supérieur (PAS le répertoire lui-même, mais bien celui du niveau supérieur) à ‘mesincludes’ est défini globalement dans le fichier PHP.INI, il sera utilisable dorénavant par tous vos sites (client-a, client-b, …) et vous pouvez à présent commencer comfortablement à développer votre charpente (n.d.l.t. ‘framework’) en conservant un code centralisé et non dupliqué.

Ne vous en faites pas à propos de l’éventualité de ne pas pouvoir l’utiliser sur un serveur web partagé (sur lequel vous il ne vous serait pas permis de modifier le PHP.INI du système). Dans une telle situation, envoyez simplement une copie de votre répertoire ‘mesincludes’ à la racine du serveur et c’est (presque) tout. En fait, vous devriez normalement avoir la possibilité de changer répertoire par répertoire le chemin d’inclusion de PHP dans les fichiers .htaccess en utilisant une syntaxe similaire à ceci:

php_value include_path    ".:c\php\includes"

Donc, comme vous le voyez, il existe de nombreuses façons de rendre votre environnement de développement plastique et compatible avec le système nerveux (limité) de votre administrateur système.

4. Linux, MacOSX (?).

Je serai moins long car si vous utilisez Linux comme environnement de développement, il y a des chances que vous connaissiez déjà l’essentiel de ceci mais, si non, les principes sont exactement les mêmes mais les fichiers sont généralement localisés sous:

/etc

(p.exple le fichier hosts) et vous redémarrez Apache en utilsant (ne tapez pas le #):

# /etc/init.d/apache2 restart

Ceci pouvant être apache2, apache ou encore httpd en fonction de votre distribution.

Vous devez être root (n.d.l.t. ma plume ne se résoud pas à écrire Racine, trop théâtral) pour modifier les fichiers et redémarrer Apache et, bien sûr, vous n’utiliserez pas le bloc-notes ;-)

Sur les dérivatifs de Debian tels qu’Ubuntu vous pouvez trouver la configuration d’Apache sous

/etc/apache2

et vous ne devriez pas avoir besoin de modifier le httpd.conf ou apache2.conf car il existe déjà des sous-répertoires contenant des confettis relatifs aux alias ou hôtes virtuels appellés:

sites-available

et

sites-enabled

Vous pouvez sauvegarder vos confettis dans sites-enabled car sites-available est ignoré.
Mais d’abord, vous activez le module de gestion des hôtes virtuels en liant un fichier appellé:

vhost_alias.load

à partir de:

modules-available

vers:

../modules-enabled

de cette façon:

# cd /etc/apache2/mods-enabled
# ln -s ../mods-available/vhost_alias.load

(j’ai vaguement aperçu qu’il existait un outil en ligne de commande qui faisait très précisément ceci, vous pourriez devoir gougler quelque peu…), après quoi vous redémarrez Apache.

Sur MAcOSX, je me suis laissé dire que quelques fichiers devaient se trouver sous /Library mais hosts reste sous /etc (je l’ai vu une fois, je vous l’assure).

5. Conclusion

En espérant que vous appréciez et en vous souhaitant de vous sentir rapidement gêné par la pseudo (Je pense que la théorique est au-dessus de 16.000.000 mais votre PC, Apache ou votre tête pourraient ne pas souffrir cela) limitation à 126 hôtes virtuels évoquée plus haut.

v. 0.1, E. LURQUIN, 2007

Source: hitud.net.