Les directives de base d’Apache

Ces directives sont celles  toujours présentes car nécessaire à la définition d’un virtual host.

 

Directive ServerName

La directive permet de définir le nom d’hôte d’une requête que le serveur utilise pour s’authentifier lui même (j’avoue je ne comprends pas très bien cette phrase), mais pas seulement ! vous pouvez aussi définir le protocole (http, https) et le port d’écoute (80 ou 8080 entre autres). Dans un contexte de serveur virtuel (l’objet de ce texte) à base de nom (et non à base d’IP), ServerName permet d’identifier de manière unique un serveur virtuel. Lire cette page pour bien comprendre comment Apache sélectionne le bon virtual host.

ServerName www.example.org

 

Directive ServerAlias

Crée d’autres noms d’un serveur virtuel, autrement dit elle définit des noms alternatifs, pour atteindre des serveur virtuels à base de nom (pas d’IP).

<VirtualHost *:80>
  ServerName server.example.com
  ServerAlias server server2.example.com server2
  ServerAlias *.example.com
  UseCanonicalName Off
  # ...
</VirtualHost>

La recherche du serveur virtuel à base de nom correspondant au plus près à la requête s’effectue selon l’ordre d’apparition des directives <virtualhost> dans le fichier de configuration. Le premier serveur virtuel dont le ServerName ou le ServerAlias correspond est choisi, sans priorité particulière si le nom contient des caractères génériques (que ce soit pour ServerName ou ServerAlias).

L’ordre de recherche par Apache est un concept important à connaitre.

Directive DocumentRoot

Elle désigne la racine principale de l’arborescence des documents.

DocumentRoot /home/monweb/public_html

Un accès à http://www.example.org va pointer sur le fichier /home/monweb/public_html/index.html, ou index.php suivant comment sont définis les fichier index avec la directive DirectoryIndex. Le chemin du répertoire ne doit pas comporter de slash final.

Directive <VirtualHost>

<VirtualHost> est une directie qui contient les directives qui ne s’appliquent qu’à un virtual host précis, je pense que sa notation type tag sert à délimiter le champ d’application des directives, à la manière de <Directory>.

<VirtualHost 10.1.2.3:80>
  ServerAdmin webmaster@host.example.com
  DocumentRoot "/www/docs/host.example.com"
  ServerName host.example.com
  ErrorLog "logs/host.example.com-error_log"
  TransferLog "logs/host.example.com-access_log"
</VirtualHost>

Dans l’exemple ci-dessus, il y a l’adresse IP du serveur virtuel = virtual host, et le port d’écoute, dans le cas d’IPV6 il faut mettre l’adresse entre crochets.

Comment se comporte Apache lorsqu’il ne parvient pas à trouver le virtual host demandé? Il se rabat sur le premier qui a la même paire IP:Port.

Si plusieurs serveurs virtuels correspondent du point de vue de l’adresse IP/port, le serveur sélectionne celui qui correspond le mieux du point de vue du nom d’hôte de la requête. Si aucune correspondance du point de vue du nom d’hôte n’est trouvée, c’est le premier serveur virtuel dont l’adresse IP/port correspond qui sera utilisé. Par voie de conséquence, le premier serveur virtuel comportant une certaine paire adresse IP/port est le serveur virtuel par défaut pour cette paire adresse IP/port.

C’est le phénomène que vous observez quand vous faites pointer un nom de domaine vers une adresse IP via un enregistrement A, et quand vous tapez l’url dans votre navigateur c’est un autre site web qui s’affiche. de plus selon la documentation officielle:

Vous devez vous assurer que les adresses des serveurs virtuels sont bien incluses dans la liste des adresses précisées par la directive Listen.

Directive SetHandler

Force le traitement des fichiers d’un certains type par un gestionnaire particulier.

La syntaxe est comme suit :

SetHandler handler-name|none|expression

<Location "/status">
 SetHandler server-status
</Location>

Dans l’exemple, chaque fois que l’url http://www.example.org/status est demandé, c’est le programme server-status qui est appelé. Vous ne retrouverez pas SetHandler dans une fichier de configuration de serveur virtuel, mais plutôt dans le fichier httpd.conf.

 

A mettre en relation avec la directive AddHandler qui provient du module mod_mime, alors que SetHandler fait partie du core.