Home page > LAMP : Linux - Apache - Mysql - Php > Apache > Optimisations > mod_deflate : Compression Gzip du contenu

mod_deflate : Compression Gzip du contenu

Le module deflate d’Apache 2 permet de faire compresser au serveur les données avant de les envoyer au client. Il remplace l’ancien mod_gzip qui était utilisé pour Apache 1.

Il permet donc principalement d’alléger le poids des pages lors de leur transaction entre le serveur et le client afin de diminuer le temps de chargement des pages.

Tout d’abord on active les deux modules nécessaires :

  1. a2enmod deflate
  2. a2enmod headers

Puis on crée un fichier spécifique de configuration dans le répertoire /etc/apache2/conf.d/ :

  1. nano /etc/apache2/conf.d/deflate

Et on le remplit par ce contenu :

  1. <IfModule mod_deflate.c>
  2.         DeflateCompressionLevel 9
  3.        
  4.         # On force deflate sur certains mauvais headers
  5.         # developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
  6.         <IfModule mod_setenvif.c>
  7.                 <IfModule mod_headers.c>
  8.                         SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
  9.                         RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
  10.                 </IfModule>
  11.         </IfModule>
  12.         #On supprime les Etags
  13.         <IfModule mod_headers.c>
  14.                 Header unset ETag
  15.         </IfModule>
  16.         FileETag None
  17.         # On active ensuite la compression par type de fichiers
  18.         AddOutputFilterByType DEFLATE application/atom_xml
  19.         AddOutputFilterByType DEFLATE application/rss+xml
  20.         AddOutputFilterByType DEFLATE application/xml
  21.         AddOutputFilterByType DEFLATE application/x-httpd-php
  22.         AddOutputFilterByType DEFLATE application/x-httpd-fastphp
  23.         AddOutputFilterByType DEFLATE application/x-httpd-eruby
  24.         AddOutputFilterByType DEFLATE application/vnd.google-earth.kml+xml
  25.         AddOutputFilterByType DEFLATE application/javascript
  26.         AddOutputFilterByType DEFLATE application/x-javascript
  27.         AddOutputFilterByType DEFLATE application/xhtml+xml
  28.         AddOutputFilterByType DEFLATE image/svg+xml
  29.         AddOutputFilterByType DEFLATE text/css
  30.         AddOutputFilterByType DEFLATE text/html
  31.         AddOutputFilterByType DEFLATE text/plain
  32.         AddOutputFilterByType DEFLATE text/xml
  33.         # On s'assure que certains types de fichiers ne sont pas pris en compte
  34.         SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar|gif|jpe?g|png|avi|mpg|swf|flv|mov|mp3|ogv|mp4|pdf|webm|ogg|rm)$ no-gzip dont-vary
  35.         # gestion des navigateurs buggés
  36.         BrowserMatch ^Mozilla/4 gzip-only-text/html
  37.         BrowserMatch ^Mozilla/4\.0[678] no-gzip
  38.         # Cette ligne est en général mise sur tous les tutoriaux mais empêche
  39.         # flowplayer de se charger sur Internet Explorer
  40.         #BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  41.         # On s'assure que les proxies envoient le bon contenu
  42.         Header append Vary User-Agent env=!dont-vary
  43. </IfModule>

Il est également possible de conserver une trace du ratio de compression dans fichier en ajoutant ces lignes :

  1. # Loguer les actions du mod_deflate
  2. DeflateFilterNote Input input_info
  3. DeflateFilterNote Output output_info
  4. DeflateFilterNote Ratio ratio_info
  5. LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
  6. CustomLog /var/log/apache2/deflate_log deflate

Il est ensuite nécessaire de redémarrer Apache de la sorte :

  1. sudo /etc/init.d/apache2 restart

NB : dans certains cas cette configuration empêche certains éléments flash (notamment flowplayer) de fonctionner correctement sur le navigateur Internet Explorer. Pour contourner cela, la solution est de commenter ou supprimer la ligne suivante [1] :

  1. BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

Pour une meilleure compréhension de ces directives, utilisez la documentation Apache de référence.

Footnotes

[1] Les effets indésirables de cela sur d’autres éléments n’ont pas été testés à 100%

No comments



Any message or comment?
  • (To create paragraphs, you simply leave blank lines.)

Who are you? (optional)
  • [Sign In]