In questo articolo vediamo come attivare un modulo in apache che permette di elaborare i documenti del sito come file html, css, js ecc in modo da velocizzarne l’invio sfruttando anche un meccanismo di caching. Come sistema di riferimenti usiamo un server debian stretch su cui gira il web server apache, ma tutto è facilmente configurabile anche sotto altri sistemi quali Ubuntu, CentOS e sotto Nginx
Installazione
Il modulo è disponibile pacchettizzato nella pagina di Download sul sito modpagespeed. Da qui possiamo copiare l’url del pacchetto che ci interessa secondo la distribuzione e l’architettura e scaricarlo sul webserver tramite wget
1 |
# wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb |
Una volta scaricato il file installiamo con dpkg
1 2 |
# dpkg -i mod-pagespeed-stable_current_amd64.deb # apt install -f |
Verifichimo che il modulo sia stato attivato in apache
1 2 |
# a2enmod pagespeed Module pagespeed already enabled |
Terminata l’installazione riavviamo apache
1 |
# systemctl reload apache2 |
Configurazione
La configurazione del modulo avviene tramite il file /etc/apache2/mods-available/pagespeed.conf. Queste impostazioni poi possono essere ottimizzate per ciascun sito all’interno del file di configurazione del virtualhost.
L’abilitazione del modulo avviene impostando il valore on della direttiva ModPagespeed Se non vogliamo che il modulo sia attivo per tutti i siti possiamo disabilitarlo globalmente impostando questo valore ad off
1 |
ModPagespeed off |
La direttiva ModPagespeedRewriteLevel abilita alcuni gruppi di default che contengono alcuni filtri. Se viene lasciata commentata, il valore di default utilizzato è CoreFilters. I valori validi sono PassThrough, CoreFilters e TestingCoreFilters. Se togliamo il commento, con PassThrough non attiviamo nessun filtro
1 |
ModPagespeedRewriteLevel PassThrough |
In unione alla precedente direttiva, si possono abilitare o disabilitare ulteriori filtri in maniere più puntuale tramite le direttive ModPagespeedEnableFilters e ModPagespeedDisableFilters
I parametri di queste due direttive sono i nomi dei filtri che vanno separati da una virgola
1 2 3 4 5 6 7 |
ModPagespeedEnableFilters remove_quotes ModPagespeedEnableFilters collapse_whitespace ModPagespeedEnableFilters elide_attributes ModPagespeedEnableFilters remove_comments ModPagespeedEnableFilters remove_quotes ModPagespeedEnableFilters rewrite_css ModPagespeedEnableFilters rewrite_javascript |
ModPagespeedFileCachePath è la direttiva che specifica la cartella di cache dove vengono salvati i documenti elaborati dal modulo e che verranno serviti ai clients. Per non ritrovarsi una cartella contenente file appartenenti a siti diversi, è bene differenziare la cartella di cache riservandone una per ciascun sito, cosa che viene fatta all’interno del file virtual host
1 |
ModPagespeedFileCachePath "/var/cache/mod_pagespeed/" |
Verifichiamo che la cartella sopracitata appartenga all’ utente ed al gruppo www-data e che i permessi siano 755. Eventualmente digitiamo
1 2 |
# chown www-data:www-data /var/cache/mod_pagespeed # chmod 755 /var/cache/mod_pagespeed |
Terminata la configurazione globale, riavviamo apache
1 |
# systemctl reload apache2 |
Fine tuning nel file virtual host
Tutte le direttive presenti (e documentate) nel file di configurazione globale, possono essere richiamate all’interno del file di configurazione del sito per una ottimizzazione più puntuale. Inseriamo tutte le righe all’ interno del blocco IfModule in questo modo
1 2 3 4 5 6 7 |
<VirtualHost *:80> <IfModule pagespeed_module> ... ... </IfModule> </VirtualHost> |
Se non abbiamo abilitato il modulo globalmente, attiviamolo qui
1 |
ModPagespeed on |
La cartella di cache può essere una figlia di quella globale. Creiamola impostandone owner e permessi, dopodiché inseriamola nel file virtualhost
1 2 3 |
# mkdir -p /var/cache/mod_pagespeed/mio_sito # chown www-data:www-data /var/cache/mod_pagespeed/mio_sito # chmod 755 /var/cache/mod_pagespeed/mio_sito |
1 |
ModPagespeedFileCachePath "/var/cache/mod_pagespeed/mio_sito/" |
L’attivazione di specifici filtri a livello di sito avviene sempre tramite ModPagespeedEnableFilters
1 |
ModPagespeedEnableFilters rewrite_javascript |
Ed analogamente la disattivazione tramite ModPagespeedDisableFilters
1 |
ModPagespeedDisableFilters rewrite_javascript |
Il filtro rewrite_javascript svolge anche la funzione di minificare il codice javascript
Terminata la configurazione del sito, riavviamo apache
1 |
# systemctl reload apache2 |
Filtri più comuni
Segue un elenco dei filtri più comuni che possono essere utilizzati
collapse_whitespace | Elimina spazi non necessari all’interno del codice html ad esclusione dei tag <pre> |
combine_css | Unisce più files css in uno solo |
combine_heads | Riunisce sezioni <head> separate in una sola |
combine_javascript | Unisce più files js in uno solo |
elide_attributes | Elimina dai tag attributi non necessari |
inline_css | Inserisce nella pagina il contenuto di piccoli file css invece che collegarli tramite l’url |
inline_javascript | Inserisce nella pagina il contenuto di piccoli file js invece che collegarli tramite l’url |
insert_ga | Inserisce nelle pagine il codice google analytics. Richiede in aggiunta la direttiva ModPagespeedAnalyticsID <Analytics ID> |
remove_comments | Rimuove i commenti HTML |
remove_quotes | Rimuove doppi apinon necessari dagli attributi dei tag |
rewrite_css | Minifica i file css |
rewrite_javascript | Minifica i file js |
trim_urls | Rimuove dagli url prefissi non necessari |
E’ disponibile un elenco completo dei filtri disponibili con gli esempi di come viene modificato il codice con e senza il filtro attivo