Apache : diffusion de plusieurs sites avec public_html et VirtualHost, et gestion des droits.

Sur un serveur Apache2 (mais ça ne change pas beaucoup pour Apache 1.x), il existe une racine de documents. Selon votre distribution ou votre façon d’installer apache, elle peut se trouver dans /var/www, /usr/local/apache/htdocs ou ailleurs, c’est vous qui le déterminez dans votre fichier de configuration httpd.conf. Dans une configuration Ubuntu standard, c’est /var/www. Cela signifie que les machines qui accèdent à votre machine via apache voient par défaut les fichiers html/php (ou autres) qui se trouvent dans ce répertoire et ses sous répertoires.

Qu’est ce qu’un VirtualHost ?

C’est le système qui permet à Apache de diffuser plusieurs sites sur la même adresse ip. Supposons que vous ayez deux domaines : www.mondomaine.fr et www.mondomaine.com. Vous souhaitez diffuser deux sites web complètement différents, mais vous n’avez qu’un serveur. Nous allons pour cela utiliser les virtualhost. Dans les exemples qui vont suivre, nous partons du principe que ce serveur a l’adresse ip 123.123.123.123.

Racine des répertoires

La première chose à faire est de définir des répertoires qui vont recevoir les deux sites. Pour le moment, nous allons choisir /var/www/mondomaine.fr/ pour www.mondomaine.fr et /var/www/mondomaine.com pour www.mondomaine.com. Plaçons dedans tous les fichiers html et php nécessaires pour faire tourner ces sites.
Pour le moment, nos sites sont accessibles dans le navigateur en tapant l’adresse http://123.123.123.123/mondomaine.fr et http://123.123.123.123/mondomaine.com.

Maintenant, il faut que les dns des domaines soient bien réglés. Dans de nombreuses opération réseau, un dns bien réglé est important, c’est encore une fois le cas ici. Il faut que les deux sous-domaines www des domains mondomaine.com et mondomaine.fr pointent vers la même adresse ip 123.123.123.123

A ce niveau là, si nous demandons dans un navigateur http://www.mondomaine.fr, nous n’aurons pas le site demandé, mais la racine web de votre serveur.

Définition d’un virtual host

Depuis Apache2, on ne définit plus les virtualhosts dans le httpd.conf d’apache, mais on crée un site dans le répertoire sites-availables situé sous la racine de configuration de votre serveur (sous Ubuntu : /etc/apache2). Pour cela, nous allons créer le fichier mondomaine.fr contenant ces informations :

<VirtualHost *:80>
ServerAdmin webmaster@mondomaine.fr
ServerName www.mondomaine.fr
DocumentRoot /var/www/mondomaine.fr
ErrorLog /var/log/apache2/mondomaine.fr-error.log
LogLevel warn
CustomLog /var/log/apache2/mondomaine.fr.log combined
</VirtualHost>

  • <VirtualHost *:80> : cela signifie que l’on commence une section VirtualHost, qui écoute sur toutes les interfaces (*) sur le port 80 (:80)
  • ServerAdmin webmaster@mondomaine.fr : on définit ici l’adresse mail du gestionnaire du site.
  • ServerName www.mondomaine.fr : c’est ici que l’on va définir que ce VirtualHost correspond au domaine www.mondomaine.fr. A partir du moment où le navigateur transmet ce nom de domaine dans la requête, on entre dans ce VirtualHost.
  • DocumentRoot /var/www/mondomaine.fr : c’est la racine d’hébergement de ce VH
  • ErrorLog /var/log/apache2/mondomaine.fr-error.log : on définit un fichier de log d’erreurs à part (si ce n’est pas fait, les logs correspondant à ce domaine seront mélangés à ceux d’Apache et des autres sites)
  • LogLevel warn : c’est le niveau du log d’erreur par défaut
  • CustomLog /var/log/apache2/mondomaine.fr.log combined : on définit un fichier de log à part (si ce n’est pas fait, les logs correspondant à ce domaine seront mélangés à ceux d’Apache et des autres sites)

Une fois que le fichier est créer, le site est disponible mais pas activé. Pour l’actriver, il faut utiliser la commande

sudo a2ensite mondomaine.fr

(a2ensite pour Apache 2 Enable Site), puis recharger la configuration d’apache

sudo /etc/init.d/apache2 reload

Maintenant, si dans votre navigateur vous tapez http://www.mondomaine.fr, vous devriez voir le site attendu.

Le public_html

Lorsqu’un utilisateur a un répertoire personnel, apache peut faire en sorte de diffuser un sous répertoire de cet utilisateur. C’est le principe du public_html, géré par le module userdir d’apache. La première chose à faire est d’activer ce module.

sudo a2enmod userdir

Puis de recharger la configuration

sudo /etc/init.d/apache2 reload

Maintenant, supposons qu’il y ait un utilisateur jean sur la machine. Il a pour répertoire personne /home/jean. Si il crée un sous répertoire /home/jean/public_html, le contenu de ce répertoire sera diffusé sous l’adresse http://123.123.123.123/~jean

Un des avantages de ce module, c’est que l’utilisateur a tous les droits sur ce qu’il diffuse. Il peut ajouter, modifier, supprimer des fichiers, et les diffuser sur le serveur sans avoir accès à la racine web. De plus, si vous installez un serveur ftp (par exemple proftpd), il peut se connecter depuis son poste pour mettre ces fichiers à jour.

Combinaison des public_html et VirtualHost

Supposons que vous ayez deux sites à diffuser : www.domainejean.fr et www.domainebertrand.com. Jean doit administrer le premier, et Bertrand le second.
La première chose à faire, est de créer les utilisateurs linux, de créer dans leurs répertoires personnels un sous dossier public_html et de leur donner l’accès à ce répertoire. Vous pouvez ensuite définir des VirtualHost qui ont pour racine ces répertoires, et votre objectif est atteint : Jean et Bertrand sont maîtres du contenu de leur site, et uniquement de celui-ci.

One thought on “Apache : diffusion de plusieurs sites avec public_html et VirtualHost, et gestion des droits.

Laisser un commentaire