# Apache/Serveurs virtuels

* Installation d'Apache
* Plusieurs sites par machine
* Serveurs virtuels (vhost)
* Répertoires utilisateurs
* Ré-écriture d'URL
* .htaccess
* Sécurité
* Connexion sécurisée (HTTPS)
* Common Gateway Interface (CGI)
* Cache web
* Problèmes connus
* Installation d'Apache
* Plusieurs sites par machine
* Serveurs virtuels (vhost)
* Répertoires utilisateurs
* Ré-écriture d'URL
* .htaccess
* Sécurité
* Connexion sécurisée (HTTPS)
* Common Gateway Interface (CGI)
* Cache web
* Problèmes connus
[ Modifier le sommaire ]

## Principe du vhost

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

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 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 :
* 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
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 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

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

### ProxyPassMatch

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

## Références

* ↑ http://httpd.apache.org/docs/2.2/mod/core.html#servername
* ↑ https://httpd.apache.org/docs/2.4/fr/vhosts/examples.html
* ↑ http://httpd.apache.org/docs/2.2/vhosts/
* ↑ https://httpd.apache.org/docs/2.4/mod/core.html#include
* ↑ https://www.vincentliefooghe.net/content/configuration-apache-24-php-fpm Exemple sur machine hôte
* ↑ 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