Date de publication: le mardi 5 juin 2007 Ã 00h20
Dernière modification: par Pascal BOYER le vendredi 14 décembre 2007 à 02h25
« Article précédent: Apache 1.3.37 : compiler et installer le module mod_gzip (XI)
» Article suivant: Apache : créer des redirections de pages et de site
Apache : optimisation de la bande passante
Lorsque vous vous adressez à un hébergeur professionnel pour louer un espace disque sur lequel placer votre site web, ce service est très souvent assorti d'une limitation en bande passante.
La bande passante, souvent exprimée en Go (Giga Octet), représente la quantité d'octets qui transitent du serveur web vers les navigateurs des visteurs au cours d'un intervalle de temps. Chez les hébergeurs, cet intervalle de temps est le mois.
Vous êtes donc la plupart du temps limités par votre contrat dans la quantité d'information que vous pouvez transmettre chaque mois. Bien sûr, il existe des contrats qui vous proposent une bande passante illimité.
Pour calculer la bande passante que vous utilisez, il vous suffit d'additionner le poids de tous les fichiers que transmet pendant un mois le serveur web à l'ensemble de tous les visiteurs de votre site. Pour cela, il existe des logiciels qui vous épargnent cette tâche fastidieuse:
- La référence en la matière: AWStats (documentation d'installation et de configuration ),
- Webalizer ,
- phpMyVisites ,
- etc...
Tous ces logiciels vous permettent d'obtenir, en plus de la bande passante que vous utilisez, de très nombreuses et précieuses informations et statistiques sur votre site web. Les fichiers à prendre en considération pour le calcul de la bande passante sont multiples:
- les pages .html, .php etc...
- les feuilles de styles (.css)
- les javascripts (.js)
- les fichiers en tout genre que les visiteurs peuvent télécharger directement sur votre site
- les flux multimédia (vidéo, musique, etc...)
- etc...
En clair, absolument tout ce qui transite entre le serveur web et les visiteurs. Et encore, n'avons-nous pas mentionné les spider ! Ce sont les robots qui scrutent internet pour que les moteurs de recherche puissent référencer les pages.
Bref... Si vous êtes limités à une bande passante de quelques centaines de méga octets ou de quelque giga octets vous avez tout intérêt à réduire au maximum la taille de chacun des fichiers qui sera transmis aux visiteurs de votre site.
Apache : le module mod_deflate
Apache 2.x
Apache , dans toutes ces versions 1.3.x à 2.2.x, permet de mettre en place, plus ou moins facilement, un système de compression des données préalablement à leur envoi. Ceci pouvant contribuer à réduire fortement la bande passante utilisée par votre site web.
Les offres d'ADSL haut débit nous permettent aujourd'hui d'envisager sans problème d'héberger nos sites web sur nos propres machines. Or, si ces offres ADSL proposent souvent des débits descendant très importants, les débits montant sont restés, quant à eux, modestes, la compression des données pour préserver la bande passante prennant alors tout son sens.
Toutes les informations que vous trouverez ci-dessous sont tirées de la documentation officielle de Apache. En particulier, vous trouverez pour le module deflate les pages suivantes:
- pour Apache 2.0: mod_deflate
- pour Apache 2.2: mod_deflate
Apache 1.3.x
Installer le module mod_deflate
Sous Debian, les modules disponibles pour Apache 2 sont listés dans le répertoire:
/etc/apache2/mods-available/
...alors que les modules effectivement activés (chargés au démarrage d'Apache) sont listés dans le répertoire:
/etc/apache2/mods-enabled/
Pour activer ou installer un nouveau module, il suffit de faire un lien symbolique vers ce module dans le sous-répertoire mods-enabled . Pour ce faire, vous pouvez soit utiliser la commande ln :
cd /etc/apache2/mods-enabled/
ln -s ../mods-available/deflate.conf deflate.conf
ln -s ../mods-available/deflate.load deflate.load
...soit utiliser la commande a2enmod fournie par Apache2:
a2enmod deflate
qui créera automatiquement les deux liens symboliques créés par les deux commandes ln .
Quelle que soit la méthode choisie, le sous-répertoire mods-enabled doit maintenant contenir au moins ces deux lignes:
... lrwxrwxrwx 1 root root 30 2007-02-15 10:08 deflate.conf -> ../mods-available/deflate.conf lrwxrwxrwx 1 root root 30 2007-02-15 10:08 deflate.load -> ../mods-available/deflate.load ...
Le module mod_headers
En plus du module deflate , vous devez, si ce n'est déjà fait, installer de la même manière le module mod_headers afin d'obtenir dans le sous-répertoire mod-enabled :
... lrwxrwxrwx 1 root root 30 2007-02-15 10:08 deflate.conf -> ../mods-available/deflate.conf lrwxrwxrwx 1 root root 30 2007-02-15 10:08 deflate.load -> ../mods-available/deflate.load lrwxrwxrwx 1 root root 40 2006-12-08 14:54 headers.load -> ../mods-available/headers.load ...
Le module mo d_setenvif
Enfin, vous devez, si là encore ce n'est déjà fait, installer de la même manière le module mod_setenvif afin d'obtenir dans le sous-répertoire mod-enabled :
... lrwxrwxrwx 1 root root 30 2007-02-15 10:08 deflate.conf -> ../mods-available/deflate.conf lrwxrwxrwx 1 root root 30 2007-02-15 10:08 deflate.load -> ../mods-available/deflate.load lrwxrwxrwx 1 root root 40 2006-12-08 14:54 headers.load -> ../mods-available/headers.load lrwxrwxrwx 1 root root 31 2006-12-08 14:54 setenvif.load -> ../mods-available/setenvif.load ...
Le fichier de configuration d'Apache
Il est nécessaire d'apporter quelques modifications au fichier de configuration d'Apache2. Sous Debian ce fichier est:
/etc/apache2/apache2.conf
En raison du fait que certains navigateurs posent quelques problèmes avec la compression des données, il faut les exclure de ce mode de fonctionnement. Et c'est le rôle des lignes suivantes que vous devez insérer dans le fichier de configuration d'Apache:
<Location /> # La directive SetOutputFilter permet d'appeler les filtres qui s'appliquent aux réponses du serveur # avant qu'elles ne soient envoyées aux visiteurs. SetOutputFilter DEFLATE # La directive BrowserMatch permet de rechercher la chaîne de caractères "Mozilla/4" dans l'en-tête # User-Agent envoyée par le navigateur du visiteur. # Une fois trouvée, le serveur applique l'option gzip-only-text/html BrowserMatch ^Mozilla/4 gzip-only-text/html # Les versions 4.06, 4.07 et 4.08 de Netscape ayant des problèmes, on n'applique aucune compression # de données si des visiteurs utilisent de tels navigateurs. BrowserMatch ^Mozilla/4\.0[678] no-gzip # Internet Explorer se fait passer dans certains cas pour Netscape alors qu'il est compatible avec # la compression de données. Il est donc nécessaire de prendre en compte ce cas. BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # Si vous utilisez une version d'Apache inférieure ou égale à 2.0.48 alors vous devez utiliser la directive # ci-dessous en lieu et place de la directive ci-dessus (en raison d'un bug dans le module setenvif): #BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # On indique ici que les images ne doivent pas être compressées. # SetEnvIf permet de définir une variable d'environnement en fonction des attributs (ici l'extension du # fichier) de la requête. # NoCase signifie qu'il ne faut pas tenir compte de la casse dans l'URI SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary # Le module mod_deflate envoie un en-tête spécial aux proxies afin que ceux-ci n'envoie une réponse # cachée (disponible en cache) qu'aux navigateurs ayant préalablement envoyé un en-tête "Accept-Encoding" Header append Vary User-Agent env=!dont-vary </Location>
Charger les modules
Pour que les nouveaux modules soient pris en compte par le serveur Apache vous devez lui demander de relire son fichier de configuration avec la commande suivante:
/etc/init.d/apache2 reload
Visualiser le taux de compression
Pour vous assurer que le module deflate fonctionne parfaitement, vous devez apporter une nouvelle modification au fichier de configuration du serveur Apache2.
Au niveau des lignes consacrées à la définition du format des logs produits par le serveur, ajoutez tout d'abord ces trois lignes:
# Contient la taille réelle du fichier avant compression DeflateFilterNote Input instream # Contient la taille du même fichier après compression DeflateFilterNote Output outstream # Contient la valeur du ratio ((Output/Input)*100) (est exprimé en %) DeflateFilterNote Ratio ratio
Ensuite, dans la ligne de la directive LogFormat , insérez ces valeurs:
%{outstream}n/%{instream}n (%{ratio}n%%) afin d'obtenir quel que chose comme ça:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{outstream}n/%{instream}n (%{ratio}n%%)" combined Vous verrez alors dans les fichiers logs produits par Apache, de telles lignes:
62.160.246.195 - - [15/Feb/2007:17:38:01 +0100] "GET /Postfix-58-main-cf.html HTTP/1.0" 200 39417 "http://www.google.com/search?client=opera&rls=fr&q=livraison+locale+%2B+postfix&sourceid=opera&ie=utf-8&oe=utf-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; fr) Opera 9.20" 39399/166679 (23%)
contenant à la fin les informations qui vous intéressent:
39399/166679 (23%)
et vous indiquent que la taille originale du fichier est 166 679 octets (162.77 Ko), qu'une fois compressé il ne pèse plus que 39 399 octets (38.48 Ko) et ne représente donc plus que 23% du fichier original. Vous venez donc de réduire votre bande passante de 77% pour l'envoi de ce fichier.
Tous les fichiers ne donnent pas lieu à de telles économies de bande passante.
Les navigateurs incompatibles
Si un visiteur utilise un navigateur ne supportant pas la compression des données, ou si le fichier envoyé est une image, alors les lignes de log se terminent ainsi:
62.160.246.195 - - [15/Feb/2007:17:38:11 +0100] "GET /Logos/precedent.gif HTTP/1.0" 200 559 "http://www.linuxorable.fr/Postfix-58-main-cf.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; fr) Opera 9.20" -/- (-%)
Sur cet exemple, on voit parfaitement que le navigateur employé est Opéra 9.20 configuré (par l'internaute ?) pour être reconnu en tant que Mozilla/4.0, donc compatible avec la compression d'image. Mais comme le fichier demandé est une image:
..... GET /Logos/precedent.gif ......
aucune compression n'est effectuée.
Commentaires













