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
# wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb
Una volta scaricato il file installiamo con dpkg
# dpkg -i mod-pagespeed-stable_current_amd64.deb # apt install -f
Verifichimo che il modulo sia stato attivato in apache
# a2enmod pagespeed Module pagespeed already enabled
Terminata l’installazione riavviamo apache
# 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
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
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
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
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
# chown www-data:www-data /var/cache/mod_pagespeed # chmod 755 /var/cache/mod_pagespeed
Terminata la configurazione globale, riavviamo apache
# 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
<VirtualHost *:80> <IfModule pagespeed_module> ... ... </IfModule> </VirtualHost>
Se non abbiamo abilitato il modulo globalmente, attiviamolo qui
ModPagespeed on
La cartella di cache può essere una figlia di quella globale. Creiamola impostandone owner e permessi, dopodiché inseriamola nel file virtualhost
# 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
ModPagespeedFileCachePath "/var/cache/mod_pagespeed/mio_sito/"
L’attivazione di specifici filtri a livello di sito avviene sempre tramite ModPagespeedEnableFilters
ModPagespeedEnableFilters rewrite_javascript
Ed analogamente la disattivazione tramite ModPagespeedDisableFilters
ModPagespeedDisableFilters rewrite_javascript
Il filtro rewrite_javascript svolge anche la funzione di minificare il codice javascript
Terminata la configurazione del sito, riavviamo apache
# 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