Les Virtuals Host ou vHosts permettent l’hébergement de plusieurs domaines sur un même système souvent doté d’une seule IP publique.

Pré-requis

Pour commencer, votre système doit être disposé à minima Apache voire d’une structure LAMP (Linx/Apache/MySQL/PHP). Le cas échéant, on procède à son installation via la commande suivante :

sudo apt-get install apache2

Ce tutoriel va détailler comment héberger les domaine_un.com et domaine_deux.com sur le même système.


Arborescence

Nous allons ensuite mettre en place l’arborescence nécessaire à la mise en place de notre vhost pour gérer les 2 domaines :

mkdir -p /var/www/domaine_un.com/public_html
mkdir -p /var/www/domaine_deux.com/public_html

On attribue les droits correspondants aux dossiers www, domaine_un.com et domaine_deux.com

chown -R www-data:www-data /var/www/html/domaine_un.com
chown -R www-data:www-data /var/www/html/domaine_deux.com
chmod -R 755 /var/www

On créé 2 pages HTML par défaut pour chacun des sites :

echo "Domaine Un" > /var/www/html/domaine_un.com/index.html
echo "Domaine Deux" > /var/www/html/domaine_deux.com/index.html

Création vHost

Désormais, on peut passer à la création de notre vhost en copiant le fichier de configuration par défaut :

cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/domaine_un.com.conf
cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/domaine_deux.com.conf

Par défaut, les deux fichiers domaine_un.com.conf et domaine_deux.com.conf ressembleront au résultat suivant :

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

On va donc modifier et ajouter les éléments suivants que l’on adaptera aux 2 domaines :

ServerAdmin webmaster@domaine_deux.com
DocumentRoot /var/www/html/domaine_deux.com
ServerName domaine_deux.com
ServerAlias www.domaine_deux.com

ServerAdmin webmaster@domaine_un.com
DocumentRoot /var/www/html/domaine_un.com
ServerName domaine_un.com
ServerAlias www.domaine_un.com

L’adresse électronique que le serveur inclut dans les messages d’erreur envoyés au client.

Racine de l’arborescence des documents, la fonction php realpath pourra vous aider à obtenir l’information si besoin.

Nom d’hôte et port que le serveur utilise pour s’authentifier lui-même.

Autres noms d’un serveur utilisables pour atteindre des serveurs virtuels à base de nom.

Il faut maintenant activer les 2 vhosts via a2ensite qui est inclus à Apache puis relancer Apache :

a2ensite domaine_un.com.conf
a2ensite domaine_deux.com.conf

ll /etc/apache2/sites-enabled
25178469 lrwxrwxrwx  1 root root   29 2017-05-18 17:56 domaine_un.com.conf -> ../sites-available/domaine_un.com.conf
25204968 lrwxrwxrwx  1 root root   33 2017-05-18 17:56 domaine_deux.com.conf -> ../sites-available/domaine_deux.com.conf

service apache2 restart

Configuration locale

Il est possible que vos domaines ne soit pas encore accessible pour diverses raisons.
Dans ce cas, nous allons modifier la configuration locale de votre système pour tester vos vhosts:

127.0.0.1 localhost
111.111.111.111 domaine_un.com
111.111.111.111 domaine_deux.com

IP de votre machine à modifier.

Vos deux sites seront désormais fonctionnels à condition que les zones DNS soit correctement configurées.