Date de publication: le jeudi 5 mars 2009 à 23h19
Dernière modification: par Pascal BOYER le vendredi 6 mars 2009 à 16h55
« Article précédent: Apache 1.3.37 : compiler et installer eAccelerator (X)
» Article suivant: Apache 2 : installer le module mod_deflate
Présentation du module mod_gzip
Ce module permet aux versions 1.3 du serveur Apache de compresser à la volée toutes sortes de données: les pages HTML, les fichiers javascript, les feuilles de style, etc...
L'algorithme de compression utilisé par mod_gzip est identique à celui du binaire gzip que l'on trouve sur toutes les distributions Linux.
Les gains, en terme de poids de fichier, sont d'autant plus importants que les objets compressés appartiennent au type MIME text/*. Ainsi, le poids de ces fichiers compressés représente souvent moins de 30% du poids initial du document.
En terme de bande passante, l'économie est donc substantielle.
La compression des documents accroit également sensiblement la rapidité d'affichage des pages web d'un site.
Le projet est hébergé sur SourceForge: page officielle du projet mod_gzip
Méthode d'installation de mod_gzip proposée
Dans la suite de l'article nous allons voir comment installer le module mod_gzip en tant que module externe d'un serveur Apache 1.3 compilé à la main.
Il est donc nécessaire, comme indiqué dans ce précédent article , que le module mod_so soit compilé pour votre serveur. Ce module permet au serveur Apache de prendre en compte des objets partagés (so = share object).
Compilation du module mod_gzip
Ce placer dans le répertoire ServeurWeb:
cd /usr/local/ServeurWeb
Télécharger l'archive du module:
wget http://downloads.sourceforge.net/mod-gzip/mod_gzip-1.3.26.1a.tgz?use_mirror=freefr
:
La dernière version produite de ce module date du 1er Octobre 2002.
Extraire le contenu de l'archive:
tar zxfv mod_gzip-1.3.26.1a.tgz
La commande ci-dessus extrait le contenu de l'archive dans un nouveau répertoire mod_gzip-1.3.26.1a.
Modifier les droits du nouveau répertoire créé et de son contenu:
chown -R root:root mod_gzip-1.3.26.1a
Ce placer dans le nouveau répertoire:
cd mod_gzip-1.3.26.1a
...dont le contenu est:
ls -la
-rw-r--r-- 1 root root 4866 oct 1 2002 ChangeLog drwxr-xr-x 3 root root 4096 oct 1 2002 docs -rw-r--r-- 1 root root 298 mar 5 23:23 Makefile -rw-r--r-- 1 root root 252 oct 1 2002 Makefile.libdir -rw-r--r-- 1 root root 2042 oct 1 2002 Makefile.tmpl -rw-r--r-- 1 root root 227701 oct 1 2002 mod_gzip.c -rw-r--r-- 1 root root 71415 oct 1 2002 mod_gzip_compress.c -rw-r--r-- 1 root root 19671 oct 1 2002 mod_gzip_debug.c -rw-r--r-- 1 root root 4322 oct 1 2002 mod_gzip_debug.h -rw-r--r-- 1 root root 10099 oct 1 2002 mod_gzip.h
Modifier dans le fichier Makefile l'emplacement du binaire apxs:
Par défaut, le fichier Makefile contient un chemin vers le binaire apxs qui ne correspond certainement pas à votre cas particulier.
La commande suivante:
man /usr/local/ServeurWeb/apache_1.3.37/man/man8/apxs.8
...affiche la documentation de apxs installée lors de la compilation du serveur.
:
Traduction de la définition de apxs donnée par la page apxs.8:
« apxs est un outil servant à construire et à installer des modules d'extension pour le serveur de Protocole de Transfert HyperTexte (HTTP) Apache. Cette tâche est accomplie en construisant un objet dynamique partagé (DSO : Dynamic Share Object ) à partir d'un ou plusieurs fichiers source ou objet. Cet objet dynamique pourra être alors chargé par le serveur Apache en fonctionnement par le biais de la directive LoadModule du module mod_so.
Afin d'utiliser ce mécanisme, votre système doit supporter la fonction DSO et votre binaire Apache httpd être compilé avec le module mod_so. Dans le cas contraire, l'outil apxs se plaint systématiquement. Pour contrôler la présence de mod_so utilisez la commande suivante:
# httpd -l »
Vioci ce que doit contenir la première ligne du fichier Makefile:
APXS?=/usr/local/ServeurWeb/apache_1.3.37/bin/apxs
Compilation du module mod_gzip:
make build
/usr/local/ServeurWeb_1.3.41/apache_1.3.41/bin/apxs -Wc,-Wall,-O3,-fomit-frame-pointer,-pipe -c mod_gzip.c mod_gzip_debug.c mod_gzip_compress.c -o mod_gzip.so gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DNO_DBM_REWRITEMAP -DMOD_SSL=208131 -DMOD_PERL -DUSE_PERL_SSI -D_REENTRANT -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DMOD_DEFLATE -DEAPI -DEAPI_MM -O3 -fpic -DSHARED_MODULE -I/usr/local/ServeurWeb_1.3.41/apache_1.3.41/include -Wall,-O3,-fomit-frame-pointer,-pipe -c mod_gzip.c cc1: error: unrecognized command line option "-Wall,-O3,-fomit-frame-pointer,-pipe" apxs:Break: Command failed with rc=1 make: *** [build] Erreur 1
Si la commande est interrompue par le message d'erreur ci-dessus, modifiez la syntaxe du fichier Makefile.
La ligne suivante:
$(APXS) -Wc,-Wall,-O3,-fomit-frame-pointer,-pipe -c mod_gzip.c mod_gzip_debug.c mod_gzip_compress.c -o mod_gzip.so
doit être remplacée par cette syntaxe:
$(APXS) -Wc "-Wall -O3 -fomit-frame-pointer -pipe" -c mod_gzip.c mod_gzip_debug.c mod_gzip_compress.c -o mod_gzip.so
Puis relancez la commande:
make build
/usr/local/ServeurWeb_1.3.41/apache_1.3.41/bin/apxs -Wc "-Wall -O3 -fomit-frame-pointer -pipe" -c mod_gzip.c mod_gzip_debug.c mod_gzip_compress.c -o mod_gzip.so gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DNO_DBM_REWRITEMAP -DMOD_SSL=208131 -DMOD_PERL -DUSE_PERL_SSI -D_REENTRANT -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DMOD_DEFLATE -DEAPI -DEAPI_MM -O3 -fpic -DSHARED_MODULE -I/usr/local/ServeurWeb_1.3.41/apache_1.3.41/include -c mod_gzip.c gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DNO_DBM_REWRITEMAP -DMOD_SSL=208131 -DMOD_PERL -DUSE_PERL_SSI -D_REENTRANT -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DMOD_DEFLATE -DEAPI -DEAPI_MM -O3 -fpic -DSHARED_MODULE -I/usr/local/ServeurWeb_1.3.41/apache_1.3.41/include -c mod_gzip_debug.c gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DNO_DBM_REWRITEMAP -DMOD_SSL=208131 -DMOD_PERL -DUSE_PERL_SSI -D_REENTRANT -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DMOD_DEFLATE -DEAPI -DEAPI_MM -O3 -fpic -DSHARED_MODULE -I/usr/local/ServeurWeb_1.3.41/apache_1.3.41/include -c mod_gzip_compress.c gcc -shared -o mod_gzip.so mod_gzip_compress.o mod_gzip_debug.o mod_gzip.o -o mod_gzip.so -Wc -Wall -O3 -fomit-frame-pointer -pipe
Installer le module mod_gzip
make install
/usr/local/ServeurWeb/apache_1.3.37/bin/apxs -A -i mod_gzip.so [preparing module `gzip' in /usr/local/ServeurWeb/apache_1.3.37/conf/httpd.conf] cp mod_gzip.so /usr/local/ServeurWeb/apache_1.3.37/libexec/mod_gzip.so chmod 755 /usr/local/ServeurWeb/apache_1.3.37/libexec/mod_gzip.so cp /usr/local/ServeurWeb/apache_1.3.37/conf/httpd.conf /usr/local/ServeurWeb/apache_1.3.37/conf/httpd.conf.bak cp /usr/local/ServeurWeb/apache_1.3.37/conf/httpd.conf.new /usr/local/ServeurWeb/apache_1.3.37/conf/httpd.conf rm /usr/local/ServeurWeb/apache_1.3.37/conf/httpd.conf.new
- Le fichier mod_gzip.so est copié dans le répertoire /usr/local/ServeurWeb/apache_1.3.37/libexec/
- Il est rendu exécutable par la ligne 4
- La ligne 5 fais une sauvegarde de votre fichier httpd.conf en httpd.conf.bak
- La ligne 6 copie le fichier apache_1.3.37/conf/httpd.conf.new en apache_1.3.37/conf/httpd.conf
- La ligne 7 supprime le fichier httpd.conf.new
Modification du fichier de configuration httpd.conf
Pour savoir quelles lignes ont été ajoutées au nouveau fichier httpd.conf vous pouvez utiliser cette commande:
diff ../apache_1.3.37/conf/httpd.conf ../apache_1.3.37/conf/httpd.conf.bak
1123d1122 < #LoadModule gzip_module libexec/mod_gzip.so 1125d1123 < #AddModule mod_gzip.c
...vous indiquant que deux lignes, 1123 et 1125, contiennent le nouveau code suivant:
#LoadModule gzip_module libexec/mod_gzip.so #AddModule mod_gzip.c
Ces deux lignes doivent être décommentées pour que le module soit chargé.
Configurer le module
A la suite des deuc précédentes lignes, ajoutez celles-ci:
<IfModule mod_gzip.c> mod_gzip_on Yes mod_gzip_minimum_file_size 300 /* taille minimum des fichiers à encoder - en octet */ mod_gzip_maximum_file_size 500000 /* taille maximum des fichiers à encoder - en octet */ mod_gzip_maximum_inmem_size 100000 mod_gzip_item_include file \.htm$ mod_gzip_item_include file \.html$ mod_gzip_item_include file \.shtml$ mod_gzip_item_include file \.shtm$ mod_gzip_item_include file \.jsp$ mod_gzip_item_include file \.php$ mod_gzip_item_include file \.pl$ mod_gzip_item_include file \.cgi$ mod_gzip_item_include mime text/.* mod_gzip_item_include mime ^application/x-httpd-php mod_gzip_item_include mime httpd/unix-directory mod_gzip_item_include handler ^perl-script$ mod_gzip_item_include handler ^server-status$ mod_gzip_item_include handler ^server-info$ mod_gzip_item_exclude file .css$ mod_gzip_item_exclude file .js$ #mod_gzip_item_exclude mime ^image/.* mod_gzip_dechunk yes mod_gzip_temp_dir /tmp mod_gzip_keep_workfiles No mod_gzip_can_negotiate yes mod_gzip_send_vary Off mod_gzip_item_exclude mime ^image/.$ mod_gzip_item_exclude mime ^image/ mod_gzip_item_exclude rspheader Content-Type:image/* </IfModule>
Relancer le serveur Apache
/etc/init.d/apachectl restart
Tester mod_gzip en ligne
En vous rendant à l'adresse suivante
vous pouvez tester le bon fonctionnement de votre module.
Parmi les information renvoyées par la page de test, vous devez voir quelque chose comme ça:
Description des directives du module mod_gzip
La page suivante:
présente une description complète (en anglais) des différentes directives du module mod_gzip.
Commentaires














