Comment créer et configurer un hôte virtuel sur Apache ?

Pré-requis

Ce tutoriel décrit la création et la configuration d'un hôte virtuel (virtual host) sur un serveur Apache. Cela va permettre de créer plusieurs sites web associés chacun à un nom de domaine en local sur un même serveur web.

Nous supposons que votre système dispose déjà de :

  1. un environnement LAMP (Linux/Apache/MySQL/PHP) ou équivalent (WAMP, XAMPP, MAMP...) ;
  2. un accès root.

Qu'est-ce qu'un hôte virtuel ou virtual host ?

Un hôte virtuel est un point d'entrée sur un serveur web (ici Apache) qui se concrétise par l'association entre un nom de domaine et son site web. Un serveur web peut donc héberger et gérer plusieurs sites web grâce à ce système de virtualisation. C'est le principe d'un serveur mutualisé.

Création d'un hôte virtuel sur Linux

Dans le cadre de ce tutoriel, nous allons créer un hôte virtuel avec le nom de domaine aftutorial.loc, qui sera utilisé pour pointer sur le site web du tutoriel en local. Les sources de ce site web sont disponibles en téléchargement.

Procédons pas à pas :

  1. éditer le fichier /etc/hosts :
    sudo nano /etc/hosts
  2. définir le DNS, qui va permettre d'associer le nom de domaine aftutorial.loc en local avec une adresse IP (ici 127.0.0.1). Pour cela, ajouter sur une nouvelle ligne, la déclaration suivante :
    127.0.0.1 aftutorial.loc
  3. enregistrer puis quitter le fichier /etc/hosts. Il faut savoir que chaque ligne significative (hors commentaire) définit l'association entre une adresse IP et un nom de domaine, et que plusieurs noms de domaine peuvent avoir la même adresse IP. Par exemple :
    # This line is a comment
    # Each comment line must start with hash character
    
    # Here our AF tutorial local web site
    127.0.0.1 aftutorial.loc
    
    # Others local web sites
    127.0.0.1 my-personal-project.loc
    127.0.0.1 another-local-web-site.loc
    127.0.0.1 test.loc
    
  4. créer le dossier du site web aftutorial.org dans le dossier /var/www/ (ou dans un autre dossier de votre choix) en saisissant la ligne de commande suivante :
    mkdir -p /var/www/aftutorial.org
  5. noter que le dossier du projet ne se nomme pas aftutorial.loc. En effet, ce dernier désigne le nom de domaine pour l'accès en local, alors que aftutorial.org correspond à celui de la production. Nous avons ainsi un nom de domaine par environnement. Pour faciliter le nommage du dossier projet et des fichiers de configuration, c'est le nom de domaine de production qui est utilisé. Cette pratique de nommage n'est pas une obligation, mais reste toutefois une bonne pratique.
  6. attribuer les droits au dossier projet aftutorial.org :
    chown -R www-data:www-data /var/www/aftutorial.org
    chmod -R 755 /var/www
    
  7. copier le fichier de configuration par défaut :
    cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/aftutorial.org.conf
  8. noter que le nom de domaine de production aftutorial.org est repris aussi bien pour le nom du dossier du projet que pour le nom de fichier de configuration, et que l'extension du fichier de configuration est .conf ;
  9. éditer le fichier de configuration :
    nano /etc/apache2/sites-available/aftutorial.org.conf
  10. adapter le contenu à notre projet :
    <VirtualHost *:80>
    	# Associate domain name with project folder
    	ServerAdmin webmaster@aftutorial.org
    	DocumentRoot /var/www/aftutorial.org/
    	ServerName aftutorial.loc
    	ServerAlias aftutorial.loc
    	
    	# (optional) Define log files
    	ErrorLog ${APACHE_LOG_DIR}/aftutorial.org-error.log
    	CustomLog ${APACHE_LOG_DIR}/aftutorial.org-access.log combined
    	
    	# (optional) Define log level (possible values include: debug, info, notice, warn, error, crit, alert, emerg)
    	LogLevel warn
    	
    	<directory /var/www/aftutorial.org>
    		AllowOverride All
    	
    		# New directive needed in Apache 2.4.3: 
    		Require all granted
    	</Directory>
    </VirtualHost>
    Ici, nous nous limiterons au protocole http et non https.
  11. enregistrer, puis quitter le fichier de configuration ;
  12. activer l'hôte virtuel aftutorial.loc configuré dans le fichier de configuration /etc/apache2/sites-available/aftutorial.org.conf :
    a2ensite /etc/apache2/sites-available/aftutorial.org.conf
    et si vous avez besoin de le désactiver, c'est :
    a2dissite /etc/apache2/sites-available/aftutorial.org.conf
  13. afficher le contenu du dossier /etc/apache2/sites-enabled :
    ll /etc/apache2/sites-enabled
  14. vérifier la présence du lien symbolique aftutorial.org.conf. Par exemple :
    lrwxrwxrwx 1 root root   35 apr.  18  2019 aftutorial.org.conf -> ../sites-available/aftutorial.org.conf
  15. relancer le serveur Apache pour prendre en compte notre hôte virtuel :
    service apache2 restart
  16. créer rapidement un fichier index.html ou index.php en y mettant un contenu (ex : "Hello world!"), puis le placer dans le dossier du projet /var/www/aftutorial.org/ ;
  17. lancer le site en local avec votre navigateur préféré en utilisant l'URL suivant :
    http://aftutorial.loc
  18. vérifier l'affichage du contenu saisi précédemment dans le fichier index. Si "Hello world!" est affiché, alors l'hôte virtuel fonctionne. Il ne reste plus qu'à y installer le site du tutoriel, ou un nouveau projet Adventy.