Apache/Serveurs virtuels

Principe du vhost modifier

Apache peut gérer plusieurs sites web simultanément. Ils seront tous accessibles à partir de la même adresse IP et du même port.

Pour les différencier, Apache se sert de l'adresse demandée par le navigateur.

Par exemple si site1.com et site2.com pointent sur la même adresse IP, les URL http://site1.com/ et http://site2.com/ aboutiront sur le même serveur.

Mais au moment de la requête, le navigateur précise qu'il a demandé l'adresse http://site1.com/ ou http://site2.com/.

Apache se sert de cette information pour savoir quel site afficher. On parle de serveur virtuel ou virtual host (vhost).

Configuration modifier

Pour indiquer à Apache quel site correspond à un nom de domaine, on utilise une section <VirtualHost *>. Sous Debian, il y a généralement un fichier par section VirtualHost dans le répertoire /etc/apache2/sites-available.

La section devra contenir une directive ServerName[1] qui indiquera le nom associé à ce serveur virtuel.

Elle pourra également contenir une directive ServerAlias si on veut que d'autres noms aboutissent à ce site.

Par exemple[2] :

  • En Windows éditer C:\Program Files (x86)\EasyPHP\binaries\conf_files\httpd.conf
  • En Unix-like : /etc/apache2/httpd.conf ou /etc/apache2/apache2.conf
<VirtualHost _default_:80>
     ServerAdmin admin@site1.com
     DocumentRoot /home/site1/public_html
     ServerName site1.com
     ServerAlias www.site1.com
</VirtualHost>

<VirtualHost MonIP2:80>
     ServerAdmin admin@site2.com
     DocumentRoot /home/site2/public_html
     ServerName site2.com
     ServerAlias www.site2.com
     AccessLog /home/site2/access.log
     ErrorLog /home/site2/error.log
     <Directory /home/site2/public_html>
         AllowOverride All
     </Directory>
</VirtualHost>

Pour affecter tous les sites et ports, remplacer ceux-ci dans la première balise par *.

En cas d'erreur Apache d'ajouter une "directive" lors de sa relance, ajouter une ligne NameVirtualHost MonIP:MonPort.

La documentation d'Apache sur les serveurs virtuels[3] contient des informations détaillées sur le sujet.

Pour que ce serveur virtuel fonctionne, il est impératif que les noms site1.com et www.site1.com soient connus par la machine qui tente d'y accéder (celle qui lance le navigateur).

Pour cela il y a plusieurs méthodes :

  • acheter le nom de domaine en question et le configurer pour qu'il pointe sur la bonne adresse IP
  • utiliser un serveur DNS qui renverra la bonne IP pour ce domaine
  • modifier le fichier hosts sur la machine cliente pour faire correspondre ce domaine à la bonne adresse IP (voir le livre Installation et configuration d'une carte réseau)

Include modifier

Pour éviter de copier-coller les mêmes lignes dans plusieurs vhost, il est possible de les inclure avec la directive "include"[4]. Exemple :

Include /etc/apache2/common.conf

ProxyPassMatch modifier

Pour utiliser les daemons PHP-FPM (qui écoutent sur le port 9000), Apache doit rediriger les connexions avec ProxyPassMatch[5][6]. Ex :

 ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/mon_site/$1

Références modifier

  1. http://httpd.apache.org/docs/2.2/mod/core.html#servername
  2. https://httpd.apache.org/docs/2.4/fr/vhosts/examples.html
  3. http://httpd.apache.org/docs/2.2/vhosts/
  4. https://httpd.apache.org/docs/2.4/mod/core.html#include
  5. https://www.vincentliefooghe.net/content/configuration-apache-24-php-fpm Exemple sur machine hôte
  6. http://www.inanzzz.com/index.php/post/su76/creating-apache-mysql-and-php-fpm-containers-for-a-web-application-with-docker-compose Exemple avec Docker