Apache e la compressione – mod_deflate

In un precedente articolo abbiamo parlato della compressione http in IIS 7, oggi vediamo come abilitare la compressione in Apache.
Questo è possibile attraverso il modulo mod_deflate.

Per quanto riguarda il funzionamento generale della compressione http vi rimandiamo al precedente articolo, vediamo ora più nel dettaglio come velocizzare apache utilizzando mod_deflate.

Come prima cosa bisogna verificare che il modulo sia installato in Apache, di default è installato con tutte le principali distribuzioni.
Se il modulo è installato, nel file di configurazione di Apache, http.conf, troveremo una riga simile alla seguente.

LoadModule deflate_module modules/mod_deflate.so

La configurazione della compressione può essere fatta in due modalità diverse, specificando in modo esplicito i tipi di file da escludere in base all’estensione o specificando in modo esplicito i tipi file da includere in base al mime type.
Bisogna inoltre considerare che è possibile abilitare la compressione per l’intero server o per un virtual host specifico.

Inclusione dei file in base al mime type

L’inclusione dei file in base al mime type avviene utilizzando una riga di configurazione simile alla seguente nel file http.conf

AddOutputFilterByType DEFLATE text/html text/plain text/xml

In questo caso si specifica che si vogliono comprimere solamente file di testo, html e xml.
Ovviamente è possibile specificare qualsiasi mime type che si vuole includere tra i file da comprimere.

Una configurazione più completa potrebbe essere quindi la seguente.

AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE application/x-httpd-eruby
AddOutputFilterByType DEFLATE text/html

Risulta anche possibile abilitare la compressione per specifiche directory

<Directory “/web/guida”>
AddOutputFilterByType DEFLATE text/html
</Directory>

Esclusione esplicita dei file in base all’estensione
Se si vogliono comprimere tutti i tipi di file e escluderne solo alcuni, è possibile utilizzare una configurazione simile alla seguente.

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

In questo caso viene specificato che non bisogna comprimere i file gif, jpg, png, i file compressi e i file pdf.

Una novità interessante, introdotta a partire da Apache 2.0.45, è costituita dalla direttiva DeflateCompressionLevel tramite la quale è possibile impostare il livello di compressione di mod_deflate.
La direttiva accetta valori tra 1 e 9 e può essere specificata nel file di configurazione di apache usando la seguente riga.

DeflateCompressionLevel 9

Aumentando il livello di compressione si ottengono file di minore dimensioni da trasferire sulla rete, il processore è però sottoposto a un carico di lavoro superiore.

Al termine della configurazione è necessario riavviare apache per rendere effettive le modifiche.

Utilizzando mod_deflate è possibile comprimere i file html e di testo intorno al 20% della dimensione originale.
Bisogna considerare comunque il maggiore carico sul processore causato dal processo di compressione, è bene quindi effettuare dei test prima di abilitare queste impostazioni in produzione.

I dettagli su mod_deflate sono disponibili sul sito ufficiale di Apache.