Comment économiser du trafic avec mod_deflate d'Apache2
Sur cette page
- 1 Activer mod_deflate
2 Configurer mod_deflate
- 2.1 Inclusion explicite de fichiers par type MIME
- 2.2 Exclusion explicite de fichiers par extension
- 2.3 Autres directives de configuration
- 3 Tests
Dans ce tutoriel, je vais décrire comment installer et configurer mod_deflate sur un serveur Web Apache2. mod_deflate permet à Apache2 de compresser des fichiers et de les transmettre aux clients (par exemple les navigateurs) capables de gérer le contenu compressé, ce que font la plupart des navigateurs modernes. Avec mod_deflate, vous pouvez compresser des fichiers HTML, texte ou XML à env. 20 à 30 % de leur taille d'origine, économisant ainsi le trafic du serveur et rendant les utilisateurs de votre modem plus satisfaits.
La compression de fichiers entraîne une charge légèrement plus élevée sur le serveur, mais d'après mon expérience, cela est compensé par le fait que les temps de connexion des clients à votre serveur diminuent considérablement. Par exemple, un utilisateur de modem qui avait besoin de sept secondes pour télécharger un fichier HTML non compressé pourrait désormais n'avoir besoin que de deux secondes pour le même fichier compressé.
En utilisant mod_deflate, vous n'avez pas à craindre d'exclure les utilisateurs dotés de navigateurs plus anciens qui ne peuvent pas gérer le contenu compressé. Le navigateur négocie avec le serveur avant qu'un fichier ne soit transféré, et si le navigateur ne peut pas gérer le contenu compressé, le serveur livre les fichiers non compressés.
mod_deflate a remplacé mod_gzip d'Apache 1.3 dans Apache2. Si vous souhaitez servir des fichiers compressés avec Apache 1.3, jetez un œil à ce tutoriel : mod_gzip - servir du contenu compressé par le serveur Web Apache
Je voudrais d'abord dire que ce n'est pas la seule manière de mettre en place un tel système. Il existe de nombreuses façons d’atteindre cet objectif, mais c’est la voie que je choisis. Je ne donne aucune garantie que cela fonctionnera pour vous !
1 Activer mod_deflate
Si Apache2 est installé, mod_deflate devrait également déjà être installé sur votre système. Nous devons maintenant l'activer. Sur Debian, on peut procéder comme ceci :
a2enmod deflate
Redémarrez ensuite Apache2 :
service apache2 restart
Sur d'autres distributions, vous devrez peut-être modifier manuellement la configuration d'Apache2 pour activer mod_deflate. Vous devrez peut-être ajouter une ligne comme celle-ci à la section LoadModule :
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
Assurez-vous d'ajuster le chemin vers mod_deflate.so, puis de redémarrer Apache2.
2 Configurer mod_deflate
La compression des fichiers peut être configurée de deux manières : soit l'exclusion explicite des fichiers par extension, soit l'inclusion explicite des fichiers par type MIME. Vous pouvez activer mod_deflate pour l'ensemble de votre serveur Apache2, ou uniquement pour des sites virtuels spécifiques. En fonction de cela, ouvrez maintenant la section de configuration globale du serveur Apache2 ou simplement la section de configuration vhost dans laquelle vous souhaitez activer mod_deflate.
2.1 Inclusion explicite de fichiers par type MIME
Si vous souhaitez compresser uniquement les fichiers HTML, texte et XML, ajoutez cette ligne à votre configuration :
AddOutputFilterByType DEFLATE text/html text/plain text/xml
C'est la configuration que j'utilise car je ne souhaite pas compresser d'images ou de fichiers PDF ou de fichiers déjà compressés tels que des fichiers zip.
2.2 Exclusion explicite de fichiers par extension
Si vous souhaitez compresser tous les types de fichiers et en exclure seulement quelques-uns, vous devez ajouter quelque chose comme ceci à votre configuration (au lieu de la ligne de la section 2.1) :
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ \
no-gzip dont-vary
SetEnvIfNoCase Request_URI \
\.(?:exe|t?gz|zip|bz2|sit|rar)$ \
no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
Cela compresserait tous les fichiers à l'exception des images (gif, jpg et png), des fichiers déjà compressés (comme zip et tar.gz) et des fichiers PDF, ce qui est logique car vous ne gagnez pas grand-chose en compressant ces types de fichiers.
2.3 Autres directives de configuration
Que vous utilisiez la configuration de la section 2.1 ou 2.2, vous devez ajouter ces lignes à votre configuration :
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Ces lignes sont destinées à certains navigateurs plus anciens qui ne prennent pas en charge la compression de fichiers autres que les documents HTML.
La configuration est désormais terminée, et vous devez maintenant redémarrer Apache2. Sur Debian, vous procédez comme ceci :
service apache2 restart
Pour en savoir plus sur les directives de configuration supplémentaires, jetez un œil au module Apache mod_deflate.
3 Tests
Pour tester notre compression, nous ajoutons quelques directives à notre configuration mod_deflate qui enregistrent le taux de compression des fichiers livrés. Ouvrez votre configuration mod_deflate et ajoutez les lignes suivantes :
DeflateFilterNote Input input_info
DeflateFilterNote Output output_info
DeflateFilterNote Ratio ratio_info
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
CustomLog /var/log/apache2/deflate_log deflate
Assurez-vous de remplacer /var/log/apache2 par le répertoire de journaux de votre Apache2. Cela pourrait être /var/log/httpd, /var/log/httpd2, etc.
Redémarrez ensuite Apache2. Sur Debian, procédez comme ceci :
service apache2 restart
Désormais, chaque fois qu'un fichier est demandé, il sera enregistré dans /var/log/apache2/deflate_log (ou dans le fichier dans lequel vous l'avez modifié). Une ligne de journal typique ressemble à ceci :
"GET /info.php HTTP/1.1" 7621/45430 (16%)
Vous voyez que le fichier info.php a été demandé et livré. Sa taille d'origine était de 45 430 octets, et elle a été compressée à 7 621 octets, soit 16 % de sa taille d'origine ! C'est un excellent résultat, et si votre site Web est principalement composé de fichiers HTML, texte et XML, mod_deflate vous fera économiser beaucoup de trafic, et pour les utilisateurs disposant d'une connexion à faible bande passante, votre site se chargera beaucoup plus rapidement.
Si vous n'avez plus besoin de la journalisation après vos tests, vous pouvez annuler les modifications de la section 3 et redémarrer Apache2.
4 liens
- Module Apache mod_deflate : http://httpd.apache.org/docs/2.0/mod/mod_deflate.html
- mod_gzip - diffusion de contenu compressé par le serveur Web Apache : https://linux-console.net/linux_apache_mod_gzip