In questo tutorial andremo a spiegare come si possa configurare HTTP/2 su un sito, in modo da potenziare e migliorare i tempi di caricamento e di completamento della pagina web. Per fare questo lavoro è richiesta una connessione SSH al sito che si desidera ottimizzare, in modo da poterlo configurare nel dettaglio – per cui sui normali hosting condivisi normalmente HTTP/2 o è abilitato dall’inizio oppure non è possibile abilutarlo senza un upgrade del servizio.
Cos’è HTTP/2
HTTP/2 è un protocollo standard più evoluto del classico HTTP/1.1, e permette – come abbiamo visto nel tutorial su HTTP/2 – di potenziare i tempi di caricamento parallelizzando le connessioni HTTP (multiplexed TCP e funzionalità Server Push)che servono a caricare immagini, foto, JS, CSS e file esterni di ogni genere nel sito.
Per fare questo tutorial ho usato un sito con WordPress preinstallato e sistema operativo Ubuntu 16.04, ma la configurazione dovrebbe essere valida per qualsiasi altro sistema Ubuntu-based. Come pre-requisito, inoltre, è fortemente consigliata la conoscenza base dell’uso di SSH.
Cosa cambia con HTTP/2 rispetto a HTTP/1.1?
In breve: il sito diventa più veloce e potrebbe impiegare di meno a caricare globalmente le pagine.
Lo switch ad HTTP/2 potrebbe tuttavia non produrre differenze di rilievo su siti molto piccoli, mal progettati o con piccoli volumi di visitatori, e comunque deve essere configurato anche nel sito in modo adeguato a seconda del portale e delle necessità o configurazioni pre-esistenti: ad esempio, con l’introduzione di HTTP/2 il minify dei file non dovrebbe più servire a molto, GZIP potrebbe creare problemi di codifica (meglio disabilitarlo, quindi), anche se poi bisogna sempre valutare nello specifico, caso per caso.
Requisiti
Per abilitare HTTP/2 in questi termini ci serviranno:
- hosting VPS o dedicato con SSH abilitato
- nome di dominio che abbia già HTTPS abilitato (va bene anche Let’s Encrypt).
Alcuni servizi di hosting anche italiani, comunque, supportano nativamente HTTP/2: eccone alcuni.
Aggiornare Ubuntu
Come prima cosa controllate di avere l’ultima versione stable di Apache, digitando da linea di comando:
apache2 -v
e verificando che la versione installata sia la 2.4. Questo è un requisito fondamentale da rispettare per non avere problemi nella configurazione in seguito. Se dovreste avere una versione di Apache precedente, dovrete probabilmente aggiungere il repository ufficiale in modo esplicito:
sudo add-apt-repository ppa:ondrej/apache2
E successivamente effettuare l’upgrade e l’update di Apache:
sudo apt update
sudo apt upgrade
La versione che ho usato di Apache per questo tutorial è precisamente la versione 2.4.27.
Configurare PHP FastCGI 7.2
Per funzionare in modo corretto con PHP, HTTP/2 richiede lo switch da mod_php
(che nel mio server su DigitalOcean era alla versione 7.1) al più moderno php-fpm
(che non altri sarebbe se non PHP FastCGI). Attenzione perchè se effettuate lo switch in modo esplicito come indicato e la versione non fosse supportata dal vostro hosting, rischierete di avere problemi di malfunzionamento: per cui appuntate sempre l’attuale versione di PHP prima di cambiarla, in modo da poterla ripristinare in caso di difficoltà .
La versione che ho installato di PHP è la 7.2, ma anche la 7.3 sembra andare bene – per la cronaca – e funzionare allo stesso modo:
sudo apt install php7.2-fpm
A questo punto dovrete abilitare i moduli Apache proxy_fcgi
e setenvif
:
sudo a2enmod proxy_fcgi setenvif
abilitare ovviamente php7.2-fpm
:
sudo a2enconf php7.2-fpm
disabilitare il vecchio modulo mod_php
:
sudo a2dismod php7.0
e finalmente riavviare Apache:
sudo service apache2 restart
Switchare MPM da “prefork” a “event”
Il modulo di default MPM (Multi-Processing Module) Prefork non è compatibile con HTTP/2 e tende a generare l’errore:
AH10034: The mpm module (prefork.c) is not supported by mod_http2
motivo per cui dovremo passare alla versione più adatta “event”.
Come prima cosa disabilitiamo il “prefork” MPM:
sudo a2dismod mpm_prefork
abilitiamo il modulo “event” MPM:
sudo a2enmod mpm_event
Finalmente, riavviamo sia Apache che PHP 7.2:
sudo service apache2 restart
sudo service php7.2-fpm restart
Configurare il virtual host per HTTP/2
Andate ad aprire il file di Apache2 della configurazione dei singoli siti, che normalmente troverete nella sottocartella:
/etc/apache2/sites_enabled/
una volta individuato il file (ad esempio 000-default.conf) bisogna editare il file stesso in corrispondenza del blocco
<VirtualHost>...</VirtualHost>
ed aggiungere come prima riga questa:
Protocols h2 h2c http/1.1
che in pratica abilita HTTP/2 su Apache, con fallback di emergenza su HTTP/1.1 nel caso in cui qualcosa andasse storto nella connessione.
Abilitare mod_http2 su Apache
Non ci resta, a questo punto, che abilitare il modulo http/2 su Apache:
sudo a2enmod http2
e riavviare tutto:
sudo service apache2 restart
Testare se il sito supporta HTTP/2
Potete verificare che il sito supporti HTTP/2 direttamente dalla console di debug di Firefox o Chrome. Diversamente, ci sono dei tool come quello di KeyCDN che permettono di verificare tutto al volo:
👇 Contenuti da non perdere 👇
- Domini Internet 🌍
- Gratis 🎉
- Informatica 🖥
- Marketing & SEO 🌪
- Meteo
- Mondo Apple 🍎
- WordPress 🤵
- 💬 Il nostro canale Telegram: iscriviti
- 🟠 Come trovare il vertice di una parabola
- 🟠 Domini .dz: come e dove registrarne uno
- 🟢 Database di WordPress e il modello EAV (Entity-Attribute-Value)