L'arborescence du site se présente comme suit :
Apache2 se fonde sur les hôtes virtuels qui sont indispensables.
Il faut créer un hôte virtuel (VirtualHost) pour chaque projet.
Il ne faut pas lancer les sites locaux par http://localhost/projet1/ ou http://localhost/projet2/ mais par un hôte virtuel pour chacun : http://projet1/ ou http://projet2/
Les fichiers de configuration sont maintenant des hôtes virtuels placés dans /etc/apache2/sites-available et activés par a2ensite.
Les fichiers .htaccess doivent être si possible remplacés par des blocs <directory>…</directory> dans les fichiers de configuration des vhosts.
Ne les utiliser que si on n'a aucun accès à la config du serveur (par exemple sur un hébergement mutualisé)
Le fichier de configuration principal (anciennement httpd.conf) est remplacé par le fichier /etc/apache2/sites-available/000-default.conf
Pour les options et les directives, voir la page Configuration de Apache 2 Apache 2 : options et directives de configuration
Le fichier /etc/hosts donne les correspondances entre les adresses IP et les noms de site.
Une petite modification est nécessaire pour un bon fonctionnement de Apache.
Ouvrez avec les droits d'administration le fichier /etc/hosts pour le modifier comme ceci :
changez les deux lignes | en la ligne |
---|---|
127.0.0.1 localhost ... 127.0.0.1 nom_réseau_du_pc | 127.0.0.1 localhost.localdomain localhost nom_réseau_du_pc |
Relancez le serveur apache par :
sudo service apache2 restart
Activez les hôtes virtuels en lançant en ligne de commande :
$ sudo a2enmod vhost_alias Enabling module vhost_alias. To activate the new configuration, you need to run: systemctl restart apache2
Pour créer un VirtualHost Apache, deux étapes :
Dans nos exemples, nous parlerons du site monsite.com et pour les sous-domaines du site doc.monsite.com
Pour des raisons de sécurité, il ne faut pas laisser les visiteurs non enregistrés circuler dans toute la machine.
Créez avec les droits d'administration le fichier /etc/apache2/sites-available/000-localhost.conf pour y écrire ceci :
<VirtualHost *:80> ServerName localhost ServerAlias localhost DocumentRoot /var/www/html <Directory /var/www/html> Options Indexes FollowSymLinks MultiViews AllowOverride all Require local </Directory> </VirtualHost>
Options
? Directive Require
Utilisateurs
Pour activer le vhost :
...@...:~ $ sudo a2enmod 000-localhost Enabling module 000-localhost To activate the new configuration, you need to run: systemctl restart apache2
Nous allons maintenant décrire les étapes pour créer l'hôte virtuel du site monsite1.
Créez avec les droits d'administration le fichier “/etc/apache2/sites-available/monsite.com.conf pour y écrire ceci :
<VirtualHost *:80> ServerName www.monsite.com ServerAlias monsite.com *.monsite.com ServerAdmin administrateur.web@domain.tld DocumentRoot /srv/www/html/monsite1 <Directory /srv/www/html/monsite1> Options Indexes FollowSymLinks MultiViews AllowOverride all Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/error.monsite1.conf.log CustomLog /var/log/apache2/access.monsite1.conf.log combined </VirtualHost>
Pour activer le vhost, lancez la commande :
sudo a2ensite monsite1
Nous devons maintenant ajouter dans le fichier /etc/hosts les noms de domaine des hôtes virtuels que nous avons définis.
Ouvrez avec les droits d'administration le fichier ”/etc/hosts.
Pour chaque hôte virtuel, insérez une ligne avec :
IP nom_de_l_hote
On peut regrouper jusqu'à 8 noms de serveurs maximum sur une même ligne pour la même IP.
On obtient quelque-chose comme :
# pour localhost 127.0.0.1 localhost projet1 ::1 localhost projet1 " pour les sites sur localhost 127.0.0.1 monsite1.com doc.monsite1.com monsite2 # sites sur une autre machine du réseau 192.068.0.12 site12.tld # machines extérieures 123.456.7.8 site.fr
les Virtualhosts dynamiques permettent une gestion beaucoup plus simple que les virtualhosts simples quand il faut gérer une grande quantité de sites.
De plus, il n'est pas nécessaire de relancer Apache après l'ajout d'un site web par exemple.
Avec cette méthode, pour créer un domaine ou un sous-domaine, il suffit de créer dans la racine un répertoire racine portant le même nom que le domaine ou le sous-domaine voulu.
Par exemple, pour créer le site « la-maman-de.marcel.com », il suffit de créer un répertoire la-maman-de.marcel.com dans /var/www/.
Il n'y a rien d'autre à faire !! En tapant http://la-maman-de.marcel.com dans un navigateur vous y accédez directement.
Voici un exemple de VirtualHost dynamique :
<VirtualHost *:80> ServerName www.loicg.dev.com ServerAlias *.*.dev.com VirtualDocumentRoot /home/web/workspace/%2/%1 <Directory /> Options Indexes FollowSymLinks MultiViews AllowOverride All </Directory> </VirtualHost>
NameVirtualHost *:80 <VirtualHost *:80> VirtualDocumentRoot /var/www/%0 VirtualScriptAlias /var/www/%0/cgi-bin LogFormat "%V %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i \" \"%{forensic-id}n\" %v" combinedvhost CustomLog "/var/log/apache2/access.log" combined CustomLog "| /usr/sbin/split-logfile" combinedvhost </VirtualHost>
Explications
Interpolation du nom de répertoire
Toutes les directives de ce module insèrent une chaîne dans un nom de chemin. La chaîne insérée (que nous appellerons maintenant le “nom”) peut être soit le nom du serveur (voir la directive UseCanonicalName pour les détails sur la manière dont il est déterminé), soit l'adresse IP du serveur virtuel hébergé par le serveur sous la forme d'un quadruplet d'octets séparés par des points. L'insertion est contrôlée par des spécificateurs inspirés de printf et possèdant de nombreux formats :
DNS : voir http://mayakron.altervista.org/wikibase/show.php?id=AcrylicHome et la mise en place sous windows 10.
et la réponse http://stackoverflow.com/questions/138162/wildcards-in-a-windows-hosts-file
Relancez Apache par la commande :
sudo service apache2 restart
...@...:~ $ sudo apachectl start
...@...:~ $ sudo apachectl graceful-stop
...@...:~ $ sudo apachectl stop
...@...:~ $ sudo apachectl graceful
...@...:~ $ sudo apachectl restart
...@...:~ $ sudo apachectl configtest
...@...:~ $ sudo systemctl status apache2
Basé sur <Titre original de l'article> par <Auteur Original>.