Table des matières

apache2 : serveur Web multi-site

Préambule et pré-requis

Ce bref tutorial a deux objectifs :

  1. Me servir de pense-bêtes ! (et vous en faire profiter) :-P
  2. Expliquer comment mettre en œuvre la gestion multi-site d'Apache2

Tout est parti du besoin que j'ai eu de devoir tester des outils de “création de site” au sein de l'intranet de mon travail.

Il me fallait donc un serveur Apache2 et la possibilité de tester plusieurs sites, un par outil (Divers CMS, Divers Wiki… ). Le tout en local.

Or, un coup de Google m'a montré beaucoup des liens dans la langue de Shakespeare, mais bien peu dans celle de Molière et en tous les cas rien qui m'ait beaucoup avancé.

Je vais donc, avec ce tutoriel, essayer de vous (me) faire gagner du temps.

“hère we Go…”

Pré-requis

Pour ceux n'ayant pas de serveur LAMP installé :
apt-get install apache2 mysql-server libapache2-mod-php5 php5-mysql

Et voilà.

Sous Debian 8 (Jessie), Apache2 passe de la version 2.2 à la version 2.4. Il existe des différences de configuration entre ces 2 versions indiquées dans la documentation d'Apache2

Déclaration des sites existants

Dans Apache2, les sites disponibles (on parle de virtualhosts, ou vhost) sont déclarés à l'aide de fichier dans le répertoire : /etc/apache2/sites-avalaible/

Partons du principe que vous souhaitez mettre en ligne 2 sites que nous nommerons site-1 et site-2 (pourquoi faire compliqué ? 8-))

Apache vous livre lors de son installation dans ce même répertoire un fichier “default” qui va nous servir de base pour nos 2 sites
On va donc en faire une copie :

Pour Apache2.2 dans Wheezy

cp /etc/apache2/sites-avalaible/default /etc/apache2/sites-avalaible/site-1
cp /etc/apache2/sites-avalaible/default /etc/apache2/sites-avalaible/site-2

Pour Apache2.4 dans Jessie

cp /etc/apache2/sites-avalaible/default /etc/apache2/sites-avalaible/site-1.conf
cp /etc/apache2/sites-avalaible/default /etc/apache2/sites-avalaible/site-2.conf

Contenu du fichier de vhost

Dans votre éditeur de texte favori (pas un traitement texte attention !) ouvrez le fichier site-1 (ou site-1.conf sous Jessie
Faisons un rapide tour d'horizon des sections qui nous intéressent:

site-1 ou site-1.conf
<VirtualHost *:80>
        ServerAdmin webmaster@localhost  
 
        DocumentRoot /var/www  
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
 
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>
 
        ErrorLog ${APACHE_LOG_DIR}/error.log
 
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
 
        CustomLog ${APACHE_LOG_DIR}/access.log combined
 
    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>
 
</VirtualHost>
Voila pour les directives qui nous préoccupent.

Comme vous le constatez vous même, il en reste d'autre que je n'ai pas détaillées, mais qui sont importantes notamment pour la sécurité. Je vous invite donc à consulter cette page pour savoir plus : http://doc.ubuntu-fr.org/apache2

Fichier vhost adapté

Voyons voir a quoi pourrait ressembler notre fichier une fois adapté à nos besoins:

Pour Apache2.2 dans Wheezy

site-1
<VirtualHost *:80>
        ServerAdmin MonMail@gmail.com
        ServerName      www.site-1.fr
        ServerAlias     site-1.fr
        ServerAlias     *.site-1.fr
 
        DocumentRoot /home/www/site-1   
                DirectoryIndex  index.php
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
 
        <Directory /home/www/site-1>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
 
        ErrorLog /home/www/apache_log/error_site-1.log
 
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
 
        CustomLog /home/www/apache_log/access_site-1.log combined
 
</VirtualHost>

Pour Apache2.4 dans Jessie

site-1.conf
<VirtualHost *:80>
        ServerAdmin MonMail@gmail.com
        ServerName      www.site-1.fr
        ServerAlias     site-1.fr
        ServerAlias     *.site-1.fr
 
        DocumentRoot /home/www/site-1   
                DirectoryIndex  index.php
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
 
        <Directory /home/www/site-1>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Require all granted
        </Directory>
 
        ErrorLog /home/www/apache_log/error_site-1.log
 
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
 
        CustomLog /home/www/apache_log/access_site-1.log combined
 
</VirtualHost>

Renouveler les opérations pour créer un fichier de vhost pour site-2

Activation/Désactivation des sites

Une fois les fichiers de vhost créés, il reste à les activer pour qu'Apache2 les prenne en compte.

Ce mécanisme permet d'avoir tout les fichiers de vhosts que l'on veut et de n'activer que ceux nécessaires.

Deux méthodes possible:

ln -s /etc/apache2/sites-avalaible/site-1 /etc/apache2/sites-enable
a2ensite site-1

…et comme ils ne font pas les choses a moitié, ils ont aussi prévu la désactivation

a2dissite site-1

Adaptation du fichier /etc/hosts

Cette opération n'est nécessaire qu'à fin de tester votre installation en local, si votre serveur et votre client sont sur la même machine, ou si vous ne disposez pasz de plusieurs noms de domaine.

Éditez votre fichier /etc/hosts et modifiez le comme suit pour que votre machine fasse le rapport entre vos vhost et le localhost.

/etc/hosts
127.0.0.1       localhost
127.0.0.1       site-1
127.0.0.1       site-2

Relancer le serveur apache2 et tester

Relancer apache2

Voir : invoke-rc.d

service apache2 restart

Testez vos sites

Ouvrez votre navigateur et testez en tapant dans la barre d'adresse:

Vous devriez voir apparaître les pages d'accueil des site-1 et site-2.

Astuce - Apache en local

Dans le cas d'une utilisation du serveur à des fins de test ou d'un développement en local, il peut-être pratique de pouvoir modifier tous les fichiers de son site sans s'empêtrer avec les problèmes de droits Root/User.
Pour cela on crée un lien symbolique depuis le répertoire du serveur vers le répertoire de son dossier personnel.

Par exemple on place les fichiers de site-1 dans : /home/utilisateur/dev/site-1, puis on crée un lien symbolique comme ceci :

 ln -s /home/utilisateur/dev/site-1 /var/www/site-1
Liens

Pour approfondir les hôtes virtuels sur un serveur apache :

Mettre en place une redirection avec apache :

1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !