29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
29-01-2012 : Parce que nous sommes un peuple debout, agissons pour rester dignes et responsables !
Logo de mon site
Logo de mon site
Faire un don

Luxpopuli / Internet / Serveur web Apache / Apache 2 : installer le module mod_deflate





Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox

Apache 2 : installer le module mod_deflate

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:

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.

:
L'écueil auquel vous allez vraisemblablement faire face est que vous ne pourrez très certainement pas avoir accès à l'administration du serveur web qui gère votre site. Seuls les hébergements dédiés autorisent cet accès. Cependant, vous pouvez demander à votre hébergeur qu'il mette en place une telle solution si ce n'est déjà fait.

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.

:
La compression des données engendre obligatoirement une charge CPU plus importante. Sur une machine dédiée à l'activité de serveur web, ce surcoût peut être facilement absorbé dans la mesure où le CPU reste la plupart du temps inactif.

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:

Apache 1.3.x

Reportez-vous à cet article: Apache 1.3.37 : compiler et installer le module mod_deflate

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