<-
Apache > Serveur HTTP > Documentation > Version 2.4

Sections de configuration

Langues Disponibles:  en  |  fr  |  ja  |  ko  |  tr 

Les directives des fichiers de configuration peuvent s'appliquer au serveur dans son ensemble, ou seulement ´┐Ż des r´┐Żpertoires, fichiers, h´┐Żtes, ou URLs particuliers. Ce document d´┐Żcrit comment utiliser les conteneurs de sections de configuration ou les fichiers .htaccess pour modifier la port´┐Że des directives de configuration.

top

Types de conteneurs de sections de configuration

Il existe deux grands types de conteneurs. La plupart des conteneurs sont ´┐Żvalu´┐Żs pour chaque requ´┐Żte. Les directives qu'ils contiennent s'appliquent seulement aux requ´┐Żtes qui sont concern´┐Żes par le conteneur. En revanche, les conteneurs <IfDefine>, <IfModule>, et <IfVersion> sont ´┐Żvalu´┐Żs seulement au d´┐Żmarrage et au red´┐Żmarrage du serveur. Si leurs conditions sont v´┐Żrifi´┐Żes au d´┐Żmarrage, les directives qu'ils contiennent s'appliqueront ´┐Ż toutes les requ´┐Żtes. Si leurs conditions ne sont pas v´┐Żrifi´┐Żes, les directives qu'ils contiennent seront ignor´┐Żes.

Le conteneur <IfDefine> contient des directives qui ne seront appliqu´┐Żes que si un param´┐Żtre appropri´┐Ż a ´┐Żt´┐Ż d´┐Żfini dans la ligne de commande de httpd. Par exemple, avec la configuration suivante, toutes les requ´┐Żtes seront redirig´┐Żes vers un autre site si le serveur est d´┐Żmarr´┐Ż en utilisant la ligne de commande : httpd -DClosedForNow:

<IfDefine ClosedForNow>
    Redirect / http://otherserver.example.com/
</IfDefine>

Le conteneur <IfModule> est similaire; les directives qu'il contient ne s'appliqueront que si un module particulier est disponible au niveau du serveur. Le module doit ´┐Żtre soit compil´┐Ż statiquement dans le serveur, soit dynamiquement et dans ce cas, la ligne LoadModule correspondante doit appara´┐Żtre plus haut dans le fichier de configuration. Ce conteneur ne doit ´┐Żtre utilis´┐Ż que dans le cas o´┐Ż votre fichier de configuration doit fonctionner ind´┐Żpendamment de la pr´┐Żsence ou de l'absence de certains modules. Il ne doit pas contenir de directives que vous souhaitez voir s'appliquer syst´┐Żmatiquement, car vous pouvez perdre ainsi de pr´┐Żcieux messages d'erreur ´┐Ż propos de modules manquants.

Dans l'exemple suivant, la directive MimeMagicFile ne s'appliquera que si le module mod_mime_magic est disponible.

<IfModule mod_mime_magic.c>
    MimeMagicFile conf/magic
</IfModule>

Le conteneur <IfVersion> est similaire aux conteneurs <IfDefine> et <IfModule>; les directives qu'il contient ne s'appliqueront que si une version particuli´┐Żre du serveur s'ex´┐Żcute. Ce conteneur a ´┐Żt´┐Ż con´┐Żu pour une utilisation dans les suites de tests et les grands r´┐Żseaux qui doivent prendre en compte diff´┐Żrentes versions et configurations de httpd.

<IfVersion >= 2.4>
    # les directives situ´┐Żes ici ne s'appliquent que si la version 
# est sup´┐Żrieure ou ´┐Żgale ´┐Ż 2.4.0. </IfVersion>

<IfDefine>, <IfModule>, et <IfVersion> peuvent inverser leur test conditionnel en le faisant pr´┐Żc´┐Żder d'un "!". De plus, ces sections peuvent ´┐Żtre imbriqu´┐Żes afin de d´┐Żfinir des restrictions plus complexes.

top

Syst´┐Żme de fichiers, arborescence du site web et expressions bool´┐Żennes

Les conteneurs de sections de configuration les plus couramment utilis´┐Żs sont ceux qui modifient la configuration de points particuliers du syst´┐Żme de fichiers ou de l'arborescence du site web. Tout d'abord, il est important de comprendre la diff´┐Żrence entre les deux. Le syst´┐Żme de fichiers est une vue de vos disques tels qu'ils sont per´┐Żus par votre syst´┐Żme d'exploitation. Par exemple, avec une installation par d´┐Żfaut, Apache httpd est situ´┐Ż dans /usr/local/apache2 pour le syst´┐Żme de fichiers UNIX, ou "c:/Program Files/Apache Group/Apache2" pour le syst´┐Żme de fichiers Windows. (Notez que des slashes directs doivent toujours ´┐Żtre utilis´┐Żs comme s´┐Żparateur de chemin dans les fichiers de configuration d'Apache httpd, m´┐Żme sous Windows.) Quant ´┐Ż l'arborescence du site web, il s'agit d'une vue de votre site tel que pr´┐Żsent´┐Ż par le serveur web et per´┐Żue par le client. Ainsi le chemin /dir/ dans l'arborescence du site web correspond au chemin /usr/local/apache2/htdocs/dir/ dans le syst´┐Żme de fichiers pour une installation d'Apache httpd par d´┐Żfaut sous UNIX. En outre, l'arborescence du site web n'a pas besoin de correspondre en permanence au syst´┐Żme de fichiers, car les pages web peuvent ´┐Żtre g´┐Żn´┐Żr´┐Żes dynamiquement ´┐Ż partir de bases de donn´┐Żes ou d'autres emplacements.

Conteneurs de syst´┐Żme de fichiers

Les conteneurs <Directory> et <Files>, ainsi que leurs ´┐Żquivalents acceptant les expressions rationnelles, appliquent des directives ´┐Ż certaines parties du syst´┐Żme de fichiers. Les directives contenues dans une section <Directory> s'appliquent au r´┐Żpertoire pr´┐Żcis´┐Ż, ainsi qu'´┐Ż tous ses sous-r´┐Żpertoires et aux fichiers que ces derniers contiennent. Le m´┐Żme effet peut ´┐Żtre obtenu en utilisant les fichiers .htaccess. Par exemple, avec la configuration suivante, l'indexation sera activ´┐Że pour le r´┐Żpertoire /var/web/dir1 et tous ses sous-r´┐Żpertoires.

<Directory /var/web/dir1>
    Options +Indexes
</Directory>

Les directives contenues dans une section <Files> s'appliquent ´┐Ż tout fichier avec le nom sp´┐Żcifi´┐Ż, quel que soit le r´┐Żpertoire dans lequel il se trouve. Ainsi par exemple, les directives de configuration suivantes, si elles sont plac´┐Żes dans la section principale du fichier de configuration, vont interdire l'acc´┐Żs ´┐Ż tout fichier nomm´┐Ż private.html quel que soit l'endroit o´┐Ż il se trouve.

<Files private.html>
    Require all denied
</Files>

Pour faire r´┐Żf´┐Żrence ´┐Ż des fichiers qui se trouvent en des points particuliers du syst´┐Żme de fichiers, les sections <Files> et <Directory> peuvent ´┐Żtre combin´┐Żes. Par exemple, la configuration suivante va interdire l'acc´┐Żs ´┐Ż /var/web/dir1/private.html, /var/web/dir1/subdir2/private.html, /var/web/dir1/subdir3/private.html, ainsi que toute instance de private.html qui se trouve dans l'arborescence /var/web/dir1/.

<Directory /var/web/dir1>
    <Files private.html>
        Require all denied
    </Files>
</Directory>

Conteneurs de l'arborescence du site web

le conteneur <Location> et son ´┐Żquivalent acceptant les expressions rationnelles, modifient quant ´┐Ż eux la configuration de parties de l'arborescence du site web. Par exemple, la configuration suivante interdit l'acc´┐Żs ´┐Ż toute URL dont la partie chemin commence par /private. En particulier, l'interdiction s'appliquera aux requ´┐Żtes pour : http://yoursite.example.com/private, http://yoursite.example.com/private123, et http://yoursite.example.com/private/dir/file.html ainsi qu'´┐Ż toute requ´┐Żte commen´┐Żant par la cha´┐Żne de caract´┐Żres /private.

<LocationMatch ^/private>
    Require all denied
</LocationMatch>

Le conteneur <Location> n'a pas besoin de faire r´┐Żf´┐Żrence ´┐Ż un ´┐Żl´┐Żment du syst´┐Żme de fichiers. Par exemple, l'exemple suivant montre comment faire r´┐Żf´┐Żrence ´┐Ż une URL particuli´┐Żre vers un gestionnaire interne du serveur HTTP Apache fourni par le module mod_status. Il n'est pas n´┐Żcessaire de trouver un fichier nomm´┐Ż server-status dans le syst´┐Żme de fichiers.

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

Espace web imbriqu´┐Ż

Pour contr´┐Żler deux URLs imbriqu´┐Żes, on doit tenir compte de l'ordre dans lequel certaines sections ou directives sont ´┐Żvalu´┐Żes. Pour <Location>, on doit avoir :

<Location /foo>
</Location>
<Location /foo/bar>
</Location>

Les directives <Alias>, quant ´┐Ż elles, sont ´┐Żvalu´┐Żes vice-versa :

Alias /foo/bar /srv/www/uncommon/bar
Alias /foo /srv/www/common/foo

Ceci est aussi vrai pour les directives ProxyPass :

ProxyPass /special-area http://special.example.com smax=5 max=10
ProxyPass / balancer://mycluster/ stickysession=JSESSIONID|jsessionid nofailover=On

Caract´┐Żres de remplacement et expressions rationnelles

Les conteneurs <Directory>, <Files>, et <Location> peuvent utiliser des caract´┐Żres de remplacement de style shell comme dans la fonction fnmatch de la biblioth´┐Żque C standard. Le caract´┐Żre "*" correspond ´┐Ż toute s´┐Żquence de caract´┐Żres, "?" ´┐Ż un caract´┐Żre seul, et "[seq]" ´┐Ż tout caract´┐Żre contenu dans seq. Le caract´┐Żre "/" ne peut pas faire l'objet d'un remplacement; il doit ´┐Żtre sp´┐Żcifi´┐Ż explicitement.

Si une d´┐Żfinition des crit´┐Żres de correspondance encore plus souple est n´┐Żcessaire, chaque conteneur poss´┐Żde son ´┐Żquivalent acceptant les expressions rationnelles : <DirectoryMatch>, <FilesMatch>, et <LocationMatch> acceptent les expressions rationnelles compatibles Perl pour d´┐Żfinir les crit´┐Żres de correspondance. Mais voyez plus loin la section ´┐Ż propos de la combinaison des sections de configuration pour comprendre comment l'utilisation de conteneurs avec des expressions rationnelles va modifier la mani´┐Żre dont les directives sont appliqu´┐Żes.

Un conteneur qui modifie la configuration de tous les r´┐Żpertoires utilisateurs ´┐Ż l'aide de caract´┐Żres de remplacement mais sans utiliser les expressions rationnelles pourrait ressembler ´┐Ż ceci :

<Directory /home/*/public_html>
    Options Indexes
</Directory>

Avec les conteneurs utilisant les expressions rationnelles, on peut interdire l'acc´┐Żs ´┐Ż de nombreux types de fichiers d'images simultan´┐Żment :

+<FilesMatch \.(?i:gif|jpe?g|png)$>
    Require all denied
</FilesMatch>

Les expressions rationnelles contenant des groupes nomm´┐Żs et des r´┐Żf´┐Żrences arri´┐Żres sont ajout´┐Żes ´┐Ż l'environnement avec leur nom en majuscules. Ceci permet de r´┐Żf´┐Żrencer des ´┐Żl´┐Żments de chemins de fichiers et d'URLs depuis une expression et au sein de modules comme mod_rewrite.

<DirectoryMatch ^/var/www/combined/(?<SITENAME>[^/]+)>
    require ldap-group cn=%{env:SITENAME},ou=combined,o=Example
</DirectoryMatch>

Expressions bool´┐Żennes

La directive <If> permet de modifier la configuration en fonction d'une condition qui peut ´┐Żtre d´┐Żfinie sous la forme d'une expression bool´┐Żenne. Dans l'exemple suivant, l'acc´┐Żs est interdit si l'en-t´┐Żte HTTP Referer ne commence pas par "http://www.example.com/".

<If "!(%{HTTP_REFERER} -strmatch 'http://www.example.com/*')">
    Require all denied
</If>

Que faut-il utiliser et quand ?

Choisir entre des conteneurs de syst´┐Żme de fichiers et des conteneurs d'arborescence du site web est vraiment tr´┐Żs simple. Pour appliquer des directives ´┐Ż des objets qui r´┐Żsident dans le syst´┐Żme de fichiers, utilisez toujours un conteneur <Directory> ou <Files>. Pour appliquer des directives ´┐Ż des objets qui ne r´┐Żsident pas dans le syst´┐Żme de fichiers (comme une page web g´┐Żn´┐Żr´┐Że par une base de donn´┐Żes), utilisez un conteneur <Location>.

Il ne faut jamais utiliser un conteneur <Location> pour restreindre l'acc´┐Żs ´┐Ż des objets du syst´┐Żme de fichiers, car plusieurs localisations de l'arborescence du site web (URLs) peuvent correspondre ´┐Ż la m´┐Żme localisation du syst´┐Żme de fichier, ce qui peut permettre de contourner vos restrictions. Par exemple, imaginez la configuration suivante :

<Location /dir/>
    Require all denied
</Location>

Elle fonctionne correctement si la requ´┐Żte appelle http://yoursite.example.com/dir/. Mais que va-t-il se passer si votre syst´┐Żme de fichiers est insensible ´┐Ż la casse ? Votre restriction va pouvoir ´┐Żtre tout simplement contourn´┐Że en envoyant une requ´┐Żte sur http://yoursite.example.com/DIR/. Le conteneur <Directory>, quant ´┐Ż lui, s'appliquera ´┐Ż tout contenu servi ´┐Ż partir de cette localisation, sans tenir compte de la mani´┐Żre dont il est appel´┐Ż. (Les liens du syst´┐Żme de fichiers constituent une exception. Le m´┐Żme r´┐Żpertoire peut ´┐Żtre plac´┐Ż dans plusieurs parties du syst´┐Żme de fichiers en utilisant des liens symboliques. Le conteneur <Directory> va suivre le lien symbolique sans modifier le nom du chemin. Par cons´┐Żquent, pour plus de s´┐Żcurit´┐Ż, les liens symboliques doivent ´┐Żtre d´┐Żsactiv´┐Żs ´┐Ż l'aide de la directive Options appropri´┐Że.)

Si vous pensez que vous n'´┐Żtes pas concern´┐Ż par ce probl´┐Żme parceque vous utilisez un syst´┐Żme de fichiers sensible ´┐Ż la casse, gardez ´┐Ż l'esprit qu'il y a de nombreuses autres mani´┐Żres pour faire correspondre plusieurs localisations de l'arborescence du site web ´┐Ż la m´┐Żme localisation du syst´┐Żme de fichiers. C'est pourquoi vous devez autant que possible toujours utiliser les conteneurs de syst´┐Żme de fichiers. Il y a cependant une exception ´┐Ż cette r´┐Żgle. Placer des restrictions de configuration dans un conteneur <Location /> est tout ´┐Ż fait sans rique car ce conteneur va s'appliquer ´┐Ż toutes les requ´┐Żtes sans tenir compte de l'URL sp´┐Żcifique.

Imbrication des sections

Certains types de sections peuvent ´┐Żtre imbriqu´┐Żs : d'une part, on peut utiliser les sections <Files> ´┐Ż l'int´┐Żrieur des sections <Directory>, d'autre part, on peut utiliser les directives <If> ´┐Ż l'int´┐Żrieur des sections <Directory>, <Location> et <Files>. Les valeurs des expressions rationnelles correspondant aux sections nomm´┐Żes se comportent de mani´┐Żre identique.

Les sections imbriqu´┐Żes sont fusionn´┐Żes apr´┐Żs les sections non-imbriqu´┐Żes de m´┐Żme type.

top

H´┐Żtes virtuels

Le conteneur <VirtualHost> contient des directives qui s'appliquent ´┐Ż des h´┐Żtes sp´┐Żcifiques. Ceci s'av´┐Żre utile pour servir des h´┐Żtes multiples ´┐Ż partir de la m´┐Żme machine, chacun d'entre eux poss´┐Żdant une configuration diff´┐Żrente. Pour de plus amples informations, voir la Documentation sur les h´┐Żtes virtuels.

top

Mandataire

Les conteneurs <Proxy> et <ProxyMatch> appliquent les directives de configuration qu'ils contiennent uniquement aux sites qui correspondent ´┐Ż l'URL sp´┐Żcifi´┐Że et auxquels on a acc´┐Żd´┐Ż via le serveur mandataire du module mod_proxy. Par exemple, la configuration suivante va interdire l'utilisation du serveur proxy pour acc´┐Żder au site www.example.com.

<Proxy http://www.example.com/*>
    Require all granted
</Proxy>
top

Quelles sont les directives autoris´┐Żes ?

Pour d´┐Żterminer quelles sont les directives autoris´┐Żes pour tel type de section de configuration, v´┐Żrifiez le Contexte de la directive. Tout ce qui est autoris´┐Ż dans les sections <Directory> l'est aussi d'un point de vue syntaxique dans les sections <DirectoryMatch>, <Files>, <FilesMatch>, <Location>, <LocationMatch>, <Proxy>, et <ProxyMatch>. Il y a cependant quelques exceptions :

top

Comment les sections sont combin´┐Żes entre elles

Les sections de configuration sont appliqu´┐Żes dans un ordre tr´┐Żs particulier. Il est important de savoir comment cet ordre est d´┐Żfini car il peut avoir des effets importants sur la mani´┐Żre dont les directives de configuration sont interpr´┐Żt´┐Żes.

L'ordre dans lequel les sections sont combin´┐Żes est :

  1. Les sections <Directory> (´┐Ż l'exception des expressions rationnelles) et les fichiers .htaccess sont appliqu´┐Żs simultan´┐Żment (avec la possibilit´┐Ż pour .htaccess, s'il y est autoris´┐Ż, de pr´┐Żvaloir sur <Directory>)
  2. Les sections <DirectoryMatch> (et <Directory ~>)
  3. Les sections <Files> et <FilesMatch> sont appliqu´┐Żes simultan´┐Żment
  4. Les sections <Location> et <LocationMatch> sont appliqu´┐Żes simultan´┐Żment
  5. Les directives <If>

Mises ´┐Ż part les sections <Directory>, chaque groupe est trait´┐Ż selon l'ordre dans lequel il appara´┐Żt dans les fichiers de configuration. Les sections <Directory> (groupe 1 ci-dessus) sont trait´┐Żes dans l'ordre du r´┐Żpertoire le plus court vers le plus long. Par exemple, <Directory /var/web/dir> sera trait´┐Ż avant <Directory /var/web/dir/subdir>. Si plusieurs sections <Directory> s'appliquent au m´┐Żme r´┐Żpertoire, elles sont trait´┐Żes selon l'ordre dans lequel elles apparaissent dans le fichier de configuration. Les sections de configuration incluses via la directive Include sont trait´┐Żes comme si elles se trouvaient r´┐Żellement dans le fichier qui les inclut ´┐Ż la position de la directive Include.

Les sections situ´┐Żes ´┐Ż l'int´┐Żrieur de sections <VirtualHost> sont appliqu´┐Żes apr´┐Żs les sections correspondantes situ´┐Żes en dehors de la d´┐Żfinition de l'h´┐Żte virtuel, ce qui permet ´┐Ż l'h´┐Żte virtuel de pr´┐Żvaloir sur la configuration du serveur principal.

Quand la requ´┐Żte est servie par le module mod_proxy, le conteneur <Proxy> prend la place du conteneur <Directory> dans l'ordre de traitement.

Les sections situ´┐Żes plus loin dans le fichier de configuration pr´┐Żvalent sur celles qui les pr´┐Żc´┐Żdent ; cependant, chaque module est responsable de la d´┐Żfinition de la forme que doit prendre cette pr´┐Żvalence. Une section de configuration ult´┐Żrieure contenant des directives d'un certain module peut ´┐Żtre ´┐Ż l'origine d'une fusion conceptuelle de certaines directives, de toutes les directives, ou un remplacement complet de la configuration du module par ses valeurs par d´┐Żfaut et les directives explicitement d´┐Żfinies dans cette section ult´┐Żrieure.

Note technique

Une s´┐Żquence <Location>/<LocationMatch> est r´┐Żellement trait´┐Że juste avant la phase de traduction du nom (o´┐Ż Aliases et DocumentRoots sont utilis´┐Żs pour faire correspondre les URLs aux noms de fichiers). Les effets de cette s´┐Żquence disparaissent totalement lorsque la traduction est termin´┐Że.

Quelques exemples

Voici un exemple imaginaire qui montre l'ordre de combinaison des sections. En supposant qu'elles s'appliquent toutes ´┐Ż la requ´┐Żte, les directives de cet exemple seront appliqu´┐Żes dans l'ordre suivant : A > B > C > D > E.

<Location />
    E
</Location>

<Files f.html>
    D
</Files>

<VirtualHost *>
<Directory /a/b>
    B
</Directory>
</VirtualHost>

<DirectoryMatch "^.*b$">
    C
</DirectoryMatch>

<Directory /a/b>
    A
</Directory>

Pour un exemple plus concret, consid´┐Żrez ce qui suit. Sans tenir compte de toute restriction d'acc´┐Żs plac´┐Że dans les sections <Directory>, la section <Location> sera ´┐Żvalu´┐Że en dernier et permettra un acc´┐Żs au serveur sans aucune restriction. En d'autres termes, l'ordre de la combinaison des sections est important, soyez donc prudent !

<Location />
    Require all granted
</Location>

# Arrghs!  Cette section <Directory> n'aura aucun effet
<Directory />
    <RequireAll>
        Require all granted
        Require not host badguy.example.com
    </RequireAll>
</Directory>

Langues Disponibles:  en  |  fr  |  ja  |  ko  |  tr 

top

Commentaires

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.