Tout d’abord on active les deux modules nécessaires :
- a2enmod deflate
- a2enmod headers
Puis on crée un fichier spécifique de configuration dans le répertoire /etc/apache2/conf-available/
[1] :
- nano /etc/apache2/conf-available/deflate.conf
Et on le remplit par ce contenu :
- <IfModule mod_deflate.c>
- DeflateCompressionLevel 9
- # On force deflate sur certains mauvais headers
- # developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
- <IfModule mod_setenvif.c>
- <IfModule mod_headers.c>
- SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
- RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
- </IfModule>
- </IfModule>
- #On supprime les Etags
- <IfModule mod_headers.c>
- Header unset ETag
- </IfModule>
- FileETag None
- # On active ensuite la compression par type de fichiers
- AddOutputFilterByType DEFLATE application/atom_xml
- AddOutputFilterByType DEFLATE application/rss+xml
- AddOutputFilterByType DEFLATE application/xml
- AddOutputFilterByType DEFLATE application/x-httpd-php
- AddOutputFilterByType DEFLATE application/x-httpd-fastphp
- AddOutputFilterByType DEFLATE application/x-httpd-eruby
- AddOutputFilterByType DEFLATE application/vnd.google-earth.kml+xml
- AddOutputFilterByType DEFLATE application/javascript
- AddOutputFilterByType DEFLATE application/x-javascript
- AddOutputFilterByType DEFLATE application/xhtml+xml
- AddOutputFilterByType DEFLATE image/svg+xml
- AddOutputFilterByType DEFLATE text/css
- AddOutputFilterByType DEFLATE text/html
- AddOutputFilterByType DEFLATE text/plain
- AddOutputFilterByType DEFLATE text/xml
- # On s'assure que certains types de fichiers ne sont pas pris en compte
- 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
- # gestion des navigateurs buggés
- BrowserMatch ^Mozilla/4 gzip-only-text/html
- BrowserMatch ^Mozilla/4\.0[678] no-gzip
- # Cette ligne est en général mise sur tous les tutoriaux mais empêche
- # flowplayer de se charger sur Internet Explorer
- #BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
- # On s'assure que les proxies envoient le bon contenu
- Header append Vary User-Agent env=!dont-vary
- </IfModule>
Il est également possible de conserver une trace du ratio de compression dans fichier en ajoutant ces lignes :
- # Loguer les actions du mod_deflate
- 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
Il est ensuite nécessaire d’activer le fichier de configuration et de redémarrer Apache de la sorte :
- sudo a2enconf deflate
- sudo service apache2 reload
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 [2] :
- BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Pour une meilleure compréhension de ces directives, utilisez la documentation Apache de référence.