Tout le monde connait le serveur ouèbe
Apache, mais bien moins
nombreux sont ceux qui connaissent son module proxy.
Ce module transforme votre indien d'Amérique en un petit proxy
HTTP 1.0 gérant un cache ouèbe.
Ce module est apparu dès la version 1.1
d'Apache, cependant, la
stabilité n'est venue qu'avec la version 1.2
.
Ce module permet par exemple de fournir un accés ouèbe à tout un réseau local sans faire d'IP-masquerading. Il suffit que les clients ouèbe sur les machines du réseau local délèguent leur requettes HTTP au proxy et que ce dernier ait un accés à l'Internet, par modem par exemple.
Déléguer ses requettes siginifie qu'au lieu de contacter le serveur ouèbe du
site ouèbe www.site.ouebe et de faire un GET /index.html
,
il suffit au client ouèbe de contacter le serveur proxy.votre.domaine
et de faire un GET http://www.site.ouebe/index.html
le proxy se
chargeant du reste. Bien entendu, on peut faire en sorte que le proxy
écoute sur un port TCP différent du 80, tout dépend de la
configuration que l'on souhaite mettre en place.
La position privilégiée d'agent auquel on délègue les requettes ouèbe permet au proxy de mettre en place et de tenir à jour un cache disque qui profite alors à tous les navigateurs qui utilisent le proxy. C'est là son principal avantage. De plus, comme tout proxy-cache qui se respecte, notre proxy peut lui-même déléguer les requètes non résolues par son cache disque à un autre proxy-cache. Celui du fournisseur d'accès à l'Internet (F.A.I.) via notre liaison PPP est tout indiqué. On parle alors de proxy-cache père dont notre proxy-cache est le fils. C'est le système bien classique de hiérarchie de caches.
Voici un petit schéma explicatif :
-----------------I-N-T-E-R-N-E-T------------------ | F. A. I. | | PPP | Proxy | -----R-E-S-E-A-U---L-O-C-A-L------ | | | Client 1 Client 2 Client 3
Certes les performances ne seront pas mirobolantes et les paramétrages sont quelque peu rudimentaires (ça n'est pas Squid quand même...) mais c'est amplement suffisant pour un petit réseau local.
Assez parlé de théorie, passons maintenant à la configuration elle même. Je présente ici une version simplifiée de la configuration que j'utilise chez moi.
Je fais tourner un Apache (1.3) sur sakapuss.linux.only, ma machine Linux personnelle, reliée à l'Internet par modem (PPP) de façon intermitante. Elle fait office de serveur de documentation et de centre d'essai pour les modifications que j'apporte au ouèbe du CULTe (via IP-aliasing pour m'amuser avec le multihosting mais c'est une autre histoire...).
sakapuss fait aussi office de serveur DNS pour mon réseau local fantaisiste linux.only. Les noms www.linux.only et proxy.linux.only ne sont que des CNAME du DNS pointant vers sakapuss.linux.only.
L'activation du module proxy d'Apache a été très simple, voici un extrait
du fichier http.conf
# Module proxy - Apache 1.1, 1.2 recommandé # Chargement du module proxy - mettez le bon répertoire ! LoadModule proxy_module /usr/lib/apache/1.3/libproxy.so # Activation du proxy ProxyRequests on # Les proxy peres ProxyRemote http://www.mygale.org/ http://www.mygale.org/ ProxyRemote * http://proxy.hol.fr:80 # Racourcis avec gestion des redirections # ProxyPass /mirror/cict http://www.cict.fr # ProxyPassReverse /mirror/cict http://www.cict.fr # Requettes interdites # ProxyBlock www.interdits.com # Taille du tampon réseau - Apache 1.3 seulement # ProxyReceiveBufferSize 2048 # Pas de proxy pour le reseau local NoProxy .linux.only 192.168.0.0/24 # Completion des noms d'hotes non qualifiés ProxyDomain .linux.only # Localisation du cache - doit etre +w pour le serveur CacheRoot /var/cache/apache # Taille du cache en Ko CacheSize 50000 # Periodicite en heures de la purge CacheGcInterval 4 # Temps de vie en heures des objets du cache CacheMaxExpire 240 # Facteur multiplicatif pour le temps de vie CacheLastModifiedFactor 1 # Temps de vie en heures des objets sans durée de vie explicite CacheDefaultExpire 240 # Niveaux d'arborescence du cache CacheDirLevels 5 # Longeur des nom des répertoires du cache CacheDirLength 2 # Pas de cache pour le réseau local NoCache linux.only
Je vous renvoie à la
documentation du module proxy d'Apache
pour les détails concernant chaque option.
Je signale tout de même que le répertoire du cache, ici
/var/cache/apache
, doit exister et doit être au moins en +w
pour le serveur ouèbe. Par exemple si le serveur tourne en www-data,
il est conseillé de faire (en tant qu'utilisateur root)
chgrp www-data /var/cache/apache chmod g=rwxs /var/cache/apache
Il ne reste plus qu'à relancer Apache. Notre proxy est alors prêt à fonctionner sur le port du serveur ouèbe, le 80 (à moins que vous ayez changé les réglages par défaut). En fait, Apache répondra à deux types de requetes. Les requettes relatives, portant sur le ouèbe local et les requètes absolues (URL) portant sur tout l'Internet, qui seront transmises à son module proxy.
Bien entendu, pour profiter du proxy, les navigateurs devront
être mis au courant de son existence. Pour Communicator par exemple,
il suffit de modifier la section
Edit/Preferences/Advanced/Proxies/Manual
.
Pour Lynx, positionner la variable d'environnement
HTTP_PROXY
à prox.linux.only:80.
Pour une plus grande souplesse dans les redirections, on peut aussi créer un
fichier de configuration automatique du proxy monproxy.pac
que l'on
mettra par exemple dans la racine de notre serveur ouèbe.
Voici un petit exemple de ce que peut contenir ce fichier (javascript):
function FindProxyForURL(url, host) { if (isInNet(host, "127.0.0.0", "255.0.0.0") || isInNet(host, "192.168.0.0", "255.255.255.0") || shExpMatch(url, "*/cgi-bin/*") || shExpMatch(url, "*.pl") || shExpMatch(url, "*.py") || shExpMatch(url, "*.cgi") || shExpMatch(url, "*.asp") || url.substring(0, 7) == "gopher:" || url.substring(0, 4) == "ftp:" || url.substring(0, 5) == "news:") return "DIRECT"; else return "PROXY proxy.linux.only:80; DIRECT"; }
Il ne faut pas oublier non plus de vérifier que le fichier de
configuration d'Apache srm.conf
contient bien la ligne :
AddType application/x-ns-proxy-autoconfig pac
Il ne reste plus qu'à demander à son
Mozilla
favorit de lire le fichier
http://www.linux.only/monproxy.pac
dans la section Edit/Preferences/Advanced/Proxies/Automatic
ou équivalente.