[APACHE DOCUMENTATION]

Apache HTTP Server Version 1.3

Apache module mod_proxy

Ce module est implémenté dans le fichier mod_proxy.c pour les versions 1.1.x d'Apache, ou le sous-répertoire modules/proxy pour la version 1.2 d'Apache, et n'est pas compilé par défaut. Il met en oeuvre un serveur de cache proxy sous HTTP 1.0. Il n'est disponible qu'à partir de la version 1.1 d'Apache. Les questions courantes à propos de la configuration exposées après les descriptions des directives.

Note :

Ce module était expérimental dans les versions 1.1.x d'Apache. La stabilité du module mod_proxy est désormais largement acquise dans la version 1.2 d'Apache.

Résumé

Ce module implémente un proxy/cache pour Apache. Il gère les fonctionnalités de proxy pour FTP, CONNECT (pour SSL), HTTP/0.9, et HTTP/1.0. Le module peut être configuré pour se connecter à d'autres modules proxy pour ces protocoles, ou éventuellement d'autres.

Directives


Directive : ProxyRequests

Syntaxe : ProxyRequests on/off
Défaut : ProxyRequests Off
Contexte : configuration serveur, hôtes virtuels
Surcharge : Not applicable
Statut : Base
Module : mod_proxy
Compatibilité : ProxyRequests n'est disponible qu'à partir de la version 1.1 d'Apache.

Ceci active ou désactive la gestion des requêtes en proxy par Apache. Définir ProxyRequests sur 'off' n'interdit cependant pas d'utiliser la directive ProxyPass.


Directive : ProxyRemote

Syntaxe : ProxyRemote <schema> <serveur-distant>
Défaut : None
Contexte : configuration serveur, hôtes virtuels
Surcharge : Non applicable
Statut : Base
Module : mod_proxy
Compatibilité : ProxyRemote n'est disponible qu'à partir de la version 1.1 d'Apache.

Elle définit un proxy distant pour ce proxy. <schema> est soit le nom ou un schéma des URLs que le serveur distant supporte, ou une URL partielle pour laquelle le serveur distant devra être utilisé, ou '*' pour indiquer que le serveur distant devra être contacté pour toutes les requêtes. <serveur-distant> est l'URL partielle du serveur distant. Syntaxe :

  <remote-server> = <protocole>://<hôte>[:port]
<protocole> est le protocole à employer pour contacter le serveur distant ; "http" est le seul protocole supporté par ce module.

Exemple :

  ProxyRemote http://goodguys.com/ http://mirrorguys.com:8000
  ProxyRemote * http://cleversite.com
  ProxyRemote ftp http://ftpproxy.mydomain.com:8080
Dans le dernier exemple, le proxy reroutera les accès FTP, encapsulées dans une nouvelle requête proxy HTTP, vers un proxy qui est capable de les traiter.

Directive : ProxyPass

Syntaxe : ProxyPass <chemin> <url>
Défaut : Aucun
Context : configuration serveur, hôtes virtuels
Surcharge : Non applicable
Statut : Base
Module : mod_proxy
Compatibilité : ProxyPass n'est disponible qu'à partir de la version 1.1 d'Apache.

Cette directive permet d'assigner des serveurs distants à une portion d'espace du serveur local ; le serveur local ne se comporte pas comme un serveur proxy au strict sens du terme, mais apparaît comme étant un miroir du serveur distant. <chemin> est le chemin local virtuel ; <url> est l'URL partielle du serveur distant.

Supposez que le serveur local ait pour adresse http://wibble.org/ ; alors

   ProxyPass /mirror/foo http://foo.com
une requête locale sur l'adresse <http://wibble.org/mirror/foo/bar> sera convertie en interne en une requête proxy sur <http://foo.com/bar>.

Directive : ProxyBlock

Syntaxe : ProxyBlock <mots/hote/domaine liste>
Défaut : Aucun
Contexte : configuration serveur, hôtes virtuels
Surcharge : Non applicable
Statut : Base
Module : mod_proxy
Compatibilité : ProxyBlock n'est disponible qu'à partir de la version 1.2 d'Apache.

La directive ProxyBlock spécifie une liste de mots, d'hôtes et/ou de domaines, séparée par des espaces. HTTP, HTTPS. Toute requête FTP qui correspondent aux mots, hôtes, ou domaines seront bloquées par le serveur proxy. Le module proxy tentera en outre de déterminer les adresses IP des éléments de la liste pouvant être interprétés comme des noms d'hôtes durant la phase de démarrage, et les enregistrera pour les tests futurs. Exemple :

  ProxyBlock joes_garage.com some_host.co.uk rocky.wotsamattau.edu
La correspondance avec 'rocky.wotsamattau.edu' serait aussi établie s'il était défini par adresse IP.

Notez que le mot 'wotsamattau' aurait été suffisant pour bloquer 'wotsamattau.edu'.

Notez aussi que

ProxyBlock *
bloque les connexions vers tous les sites.

Directive : NoProxy

Syntaxe : NoProxy { <Domaine> | <SousReseau> | <AdresseIp> | <Hote> }
Défaut : Aucun
Contexte : configuration serveur, hôtes virtuels
Surcharge : Non applicable
Statut : Base
Module : mod_proxy
Compatibilité : NoProxy n'est disponible qu'à partir de la version 1.3 d'Apache.

Cette directive n'est utile que pour les serveurs proxy Apache à l'intérieur d'architectures Intranet. Elle spécifie une liste de sous-réseaux, d'adresses IP, de noms d'hôtes et/ou de domaines, séparée par des espaces. Une requête sur les hôtes qui correspondent à l'une au moins de ces définitions sera toujours servi en direct, sans que les requêtes ne soient adressées au(x) serveur(s) proxy ProxyRemote configurés.

Exemple :

  ProxyRemote  *  http://firewall.mycompany.com:81
  NoProxy         .mycompany.com 192.168.112.0/21 
Les arguments de la directive NoProxy peuvent être des éléments de liste parmi :
Domaine
Un Domaine est un nom de domaine DNS partiel, précédé par un point. Il représente une liste d'hôtes qui appartiennent logiquement au même sur-domaine ou zone DNS (c'est-à-dire que tous ces noms de domaines se terminent par Domaine).
Exemples : .com .apache.org.
Afin de distinguer les Domaines des Hotes (à la fois syntaxiquement et sémantiquement ; un domaine DNS peut avoir un enregistrement DNS également !), on écrira les Domaines avec un point initial.
Note: Les comparaisons de noms de domaines sont effectuées sans tenir compte de la casse, et on supposera que les Domaines sont toujours exprimés par rapport à la racine de l'espace des domaines. Ainsi les deux domaines .MonDomaine.com et .mondomaine.com. (notez le point final) serotn considérés comme équivalents. Comme la comparaison de domaines ne passe pas par une résolution de noms, elle est beaucoup plus rapide qu'une comparaison sur les sous-réseaux.
Sous-réseau
A SousReseau est une adresse Internet partielle sous forme numérique (quarté pointé), suivi éventuellement par un slash et le masque de sous-réseau, exprimé sous forme d'un entier donnant le nombre de bits significatifs au titre du SousReseau. Il est utilisé pour rassembler un sous-ensemble d'hôtes qui peuvent être atteints à travers une interface réseau commune. En l'absence d'un masque de sous-réseau explicite, on supposera que les quartés manquants (ou notés à la valeur zéro) sont associés au sous-réseau. (Dans ce cas, le masque de sous réseau ne peut avoir qu'une largeur égale à un multiple de 8 bits).
Exemples :
192.168 ou 192.168.0.0
le sous-réseau 192.168.0.0 avec un masque implicite de 16 bits valides (parfois utilisés comme masque explicite sous la forme 255.255.0.0)
192.168.112.0/21
le sous-réseau 192.168.112.0/21 avec un masque explicite de 21 bits valides (aussi exprimé explicitement sous la forme 255.255.248.0)
En considérant des cas extrêmes, un SousReseau avec ses 32 bits valides est l'équivalent d'une AdresseIP, tandis qu'un SousReseau à zéro bits valides (exemple : 0.0.0.0/0) est équivalent à la constante _Default_, correspondant à toutes les adresses IP.
Adresses IP
A AdresseIP est une adresse Internet complète sous forme numérique (quarté pointé). Habituellement, cette adresse représente un hôte, mais il n'est pas nécessaire qu'un translaté existe pour cette adresse dans l'espace des noms de domaines.
Exemple : 192.168.123.7
Note : Une AdresseIP n'a pas besoin d'être "résolue" par un quelconque serveur DNS, et une telle comparaison est donc assez efficace dans apache.

Voir aussi : Apache et DNS

Noms d'hôtes
Un Hote est un nom de domaine DNS entièrement qualifié qui peut être résolu en une ou plusieurs AdressesIP par un serveur DNS. Il désigne un hôte logique (contrairement au Domaine, tel qu'exprimé ci-avant) et une résolution doit pouvoir être effectuée sur au moins une AdresseIP (ou souvent sur une liste d'hôtes disposant de différentes AdresseIP).
Exemples : prep.ai.mit.edu www.apache.org.
Note : Dans de nombreuses situations, il sera plus efficace de directement spécifier une AdresseIP plutôt qu'un nom d'Hôte car vous éviterez ainsi une résolution DNS. La résolution de nom dans Apache peut consommer un temps non négligeable lorsque la connexion au serveur DNS utilise une liaison PPP lente.
Note: Les comparaisons d'Hôtes sont effectuées sans tenir compte de la casse, et l'on considère que les noms d'Hôtes sont toujours indiqués relativement à la racine de l'arbre des noms de domaines. De ce fait, les noms d'hôtes WWW.MonDomaine.com et www.mondomaine.com. (notez le point final) sont considérés comme équivalents.

Voir aussi : Apache et DNS


Directive : ProxyDomain

Syntaxe : ProxyDomain <Domaine>
Défaut : Aucun
Contexte : configuration serveur, hôtes virtuels
Surcharge : Non applicable
Statut : Base
Module : mod_proxy
Compatibilité : ProxyDomain n'est disponible qu'à partir de la version 1.3 d'Apache.

Cette directive n'est utile que pour des serveurs proxy Apache à l'intérieur d'architectures Intranet. Elle spécifie les domaines auxquels le serveur proxy apache appartient par défaut. Si une requête est adressée sans mention de nom de domaine, une réponse de redirection sera renvoyée pointant sur la même adresse, mais suffixée par le Domaine configuré.

Exemple :

  ProxyRemote  *  http://firewall.mycompany.com:81
  NoProxy         .mycompany.com 192.168.112.0/21 
  ProxyDomain     .mycompany.com

Directive : CacheRoot

Syntaxe : CacheRoot <repertoire>
Défaut : Aucun
Contexte : configuration serveur, hôtes virtuels
Surcharge : Non applicable
Statut : Base
Module : mod_proxy
Compatibilité : CacheRoot n'est disponible qu'à partir de la version 1.1 d'Apache.

Définit le nom du répertoire qui contient les fichiers caches ; celui-ci doit être ouvert à l'écriture pour l'utilisateur sous lequel tourne le serveur httpd.


Directive : CacheSize

Syntaxe : CacheSize <taille>
Défaut : CacheSize 5
Contexte : configuration serveur, hôtes virtuels
Surcharge : Non applicable
Statut : Base
Module : mod_proxy
Compatibilité : CacheSize est disponible à partir de la version 1.1 d'Apache.

Indique l'espace de stockage souhaité pour la fonction cache d'Apache, exprimé en Ko (1024 octets). Avant que le proxy ne soit amené à atteindre ce volume, le mécanisme de "nettoyage" supprimera les fichiers même lorsque le volume réellement utilisé est en dessous de cette valeur.


Diretive : CacheGcInterval

Syntaxe : CacheGcInterval <temps>
Défaut : None
Contexte : configuration serveur, hôtes virtuels
Surcharge : Non applicable
Statut : Base
Module : mod_proxy
Compatibilité : CacheGcinterval est disponible àpartir de la version 1.1 d'Apache.

Vérifie le cache toutes les <temps> heures, et détruit les fichiers si l'espace de stockage utilisé dépasse le volume limite défini par CacheSize.


Directive : CacheMaxExpire

Syntaxe : CacheMaxExpire <temps>
Défaut : CacheMaxExpire 24
Contexte : configuration serveur, hôtes virtuels
Surcharge : Non applicable
Statut : Base
Module : mod_proxy
Compatibilité : CacheMaxExpire est disponible à partir de la version 1.1 d'Apache.

Les documents HTTP qui peuvent être enregistrés en cache y seront stockés au plus <temps> heures sans que le serveur original ne soit contacté. Ainsi, la caducité de ces documents ne pourra être supérieure à <temps> heures. Elle sera encore plus courte si une date de péremption a été inscrite dans le document.


Directive : CacheLastModifiedFactor

Syntaxe : CacheLastModifiedFactor <facteur>
Défaut : CacheLastModifiedFactor 0.1
Contexte : configuration serveur, hôtes virtuels
Surcharge : Non applicable
Statut : Base
Module : mod_proxy
Compatibilité : CacheLastModifiedFactor est disponible à partir de la version 1.1 d'Apache.

Si le serveur HTTP d'origine ne fournit pas de date de péremption pour ses documents, alors Apache en estimera une en utilisant la formule :

  expiration = temps_depuis_dernière_modification * <facteur>
Par exemple, si le document a été modifié il y a 10 heures, et le <facteur> vaut 0,1, alors la période d'expiration sera fixée à 10*0,1 = 1 heure.

Si le temps d'expiration estimé est supérieur à la limite définie par CacheMaxExpire, alors c'est cette limite qui est prise en compte.


Directive : CacheDirLevels

Syntaxe : CacheDirLevels <niveaux>
Défaut : CacheDirLevels 3
Contexte : configuration serveur, hôtes virtuels
Surcharge : Non applicable
Statut : Base
Module : mod_proxy
Compatibilité : CacheDirLevels est disponible à partir de la version 1.1 d'Apache.

La directive CacheDirLevels définit le nombre de niveaux de sous-répertoires dans le cache. Les données cachées le seront jusqu'à cette profondeur en dessous de CacheRoot.


Directive : CacheDirLength

Syntaxe : CacheDirLength <longueur>
Défaut : CacheDirLength 1
Contexte : configuration serveur, hôtes virtuels
Surcharge : Non applicable
Statut : Base
Module : mod_proxy
Compatibilité : CacheDirLength est disponible à partir de la version 1.1 d'Apache.

La directive CacheDirLength le nombre de caractères maximum pour les noms de sous-répertoires dans l'espace de cache.


Directive : CacheDefaultExpire

Syntaxe : CacheDefaultExpire <temps>
Défaut : CacheDefaultExpire 1
Contexte : configuration serveur, hôtes virtuels
Surcharge : Non applicable
Statut : Base
Module : mod_proxy
Compatibilité : CacheDefaultExpire est disponible à partir de la version 1.1 d'Apache.

Si le document est accédé via un protocole qui ne supporte pas la définition de temps d'expiration, alors Apache utilisera <temps> heures comme délai d'expiration. CacheMaxExpire ne peut outrepasser cette limite.


Directive : NoCache

Syntaxe : NoCache <mots/hote/domaine liste>
Défaut : Aucun
Contexte : configuration serveur, hôtes virtuels
Surcharge : Non applicable
Statut : Base
Module : mod_proxy
Compatibilité : NoCache est disponible à partir de la version 1.1 d'Apache.

La directive NoCache spécifie une liste de mots, hôtes et/ou domaines, séparée par des espaces. Les documents HTTP et FTP à accès non sécurisé en provenance d'hôtes pour lesquels une correspondance peut être trouvée avec les mots, noms d'hôtes ou domaines ne seront pas cachés par le serveur proxy. Le module proxy essaiera de déterminer également les adresses IP des éléments de liste pouvant être assimilés à des noms d'hôtes au moment du démarrage, et les gardera en mémoire pour éviter d'avoir à procéder à des résolutions d'adresse au moment des tests. Exemple :

  NoCache joes_garage.com some_host.co.uk bullwinkle.wotsamattau.edu
La correspondance avec 'bullwinkle.wotsamattau.edu' sera également établie s'il est référencé par adresse IP.

Notez que le mot 'wotsamattau' suffit pour désigner 'wotsamattau.edu'.

Notez aussi que

NoCache *
désactive complètement le cache.


Configurations courantes

Contrôle d'accès à votre proxy

Vous pouvez contrôler qui doit pouvoir accéder à votre proxy par une section <Directory> normale, en suivant l'exemple qui suit :

<Directory proxy:*>
<Limit GET PUT POST DELETE CONNECT OPTIONS>
order deny,allow
deny from [machines que vous ne voulez *pas* autoriser, par adresse IP ou par leur nom]
allow from [machines que vous voulez autoriser, par adresse IP ou par leur nom]
</Limit>
</Directory>

Une section <Files> marchera aussi, et est même la seule méthode qui fonctionne pour contrôler toutes les URL possibles dans les versions antérieures à la version 1.2b10.

Utilisation des raccourcis de noms sous Netscape

Il existe un patch optionnel au module proxy qui permet d'utiliser les raccourcis de noms du type de ceux utilisés par Netscape. Il est disponible à l'adresse www.apache.org/.../Patches/1.2/Netscapehost.patch.

Pourquoi les fichiers de type xxx ne se téléchargent pas via FTP ?

Ce type particulier de fichier n'est probablement pas défini en tant que application/octet-stream dans la déclaration des types MIME pour votre proxy. Une ligne bien utile peut vous aider :

application/octet-stream        bin dms lha lzh exe class tgz taz

Pourquoi Apache démarre plus lentement lorsqu'il utilise le module proxy ?

Si vous utilisez les directives ProxyBlock ou NoCache, les noms d'hôtes sont translatés en adresses IP par des requêtes DNS, puis enregistrées pour les futurs tests. Ceci peut prendre quelques secondes (ou plus) suivant la vitesse à laquelle se font les résolutions de noms de domaines.

Peut-on utiliser le proxy Apache avec un proxy SOCKS ?

Oui. Il suffit de compiler Apache en ajoutant la règle SOCKS4=yes dans le fichier Configuration, et de suivre les instructions qui suivent. La fonctionnalité SOCKS5 peut être ajoutée de la même manière (il n'existe pas de règle SOCKS5 pour l'instant), en modifiant la définition EXTRA_LDFLAGS, ou en construisant Apache normalement, et en l'exécutant avec le patch runsocks fourni par SOCKS5, si votre système supporte les librairies dynamiques.

Certains utilisateurs nous ont fait part de problèmes avec SOCKS en version 4.2 sur Solaris. Le problème a été résolu par la remise à jour en 4.3 de SOCKS.

Souvenez-vous que vous devez également autoriser l'accès sur votre machine proxy Apache en autorisant les connexions sur les ports appropriés dans la configuration du démon SOCKS.

Quelles autres fonctions sont utiles pour un serveur proxy d'un Intranet ?

Un serveur proxy Apache situé dans une architecture Intranet doit pouvoir rerouter des requêtes extérieures à travers le firewall d'entrée de la société. Cependant, lorsqu'il doit accéder à des ressources situées dans l'espace Intranet, il peut outrepasser le firewall lorsqu'il accède aux hôtes. La directive NoProxy est utile pour spécifier quels hôtes appartiennent à l'espace Intranet et peuvent être joints directement.

Les utilisateurs d'un Intranet tendent à omettre le nom de domaine local dans leurs requêtes WWW, et requièrent souvent des adresses de la forme "http://unhote/" plutôt que "http://unhote.mon.dom.aine/". Certains serveurs proxy commerciaux laissent passer cette requête et la servent, ce qui implique l'usage d'un nom de domaine local par défaut. Lorsque la directive ProxyDomain est utilisée et le serveur est configuré pour assurer le service proxy, Apache peut répondre par une redirection et renvoyer le client sur une adresse correcte, entièrement qualifiée. C'est une méthode préférable qui permet à l'utilisateur de mettre à jour les "favoris" avec l'adresse complète de la ressource.


Apache HTTP Server Version 1.3

Index Home