Protocollo di trasferimento ipertestuale versione 2 (HTTP/2 ) è l'ultima versione del protocollo HTTP, pubblicata come standard IETF in RFC 7540 nel 2015. Il focus del protocollo è sulle prestazioni; in particolare, la latenza percepita dall'utente finale, la rete e l'utilizzo delle risorse del server. Uno degli obiettivi principali è consentire l'utilizzo di un'unica connessione dai browser a un sito Web. Il protocollo è compatibile con le versioni precedenti, quindi i metodi HTTP, i codici di stato e la semantica sono gli stessi delle versioni precedenti del protocollo. Apache ha il supporto HTTP/2 dalla versione 2.4.17. In questo tutorial, presumo che tu abbia già una configurazione TLS funzionante e che tu abbia la versione Apache richiesta installata sulla tua distribuzione Linux preferita e che tu sappia come usare Let's Encrypt, o sai come rilasciare un certificato autofirmato.
Questo tutorial è stato testato su Debian 10 , Debian 9, Ubuntu 20.04 LTS, e Ubuntu 18.04 LTS.
Prerequisiti
Per abilitare HTTP/2 in Apache dovrai soddisfare i seguenti requisiti:
- Per prima cosa, devi abilitare HTTPS sul tuo server. Tutti i principali browser consentono di utilizzare HTTP/2 solo su HTTPS. Inoltre, TLS è richiesta la versione del protocollo>=1.2 con moderne suite di crittografia.
- Quindi, assicurati di eseguire Apache 2.4.17 o superiore perché HTTP/2 è supportato da questa versione in poi.
- Inoltre, assicurati che il tuo client/browser supporti effettivamente HTTP/2.
Disabilita il modulo mod_php
Prima di poter passare il modulo Apache MPM nel passaggio successivo a mpm_event, dovremo disabilitare la vecchia modalità mod_php e sostituirla con la più moderna modalità PHP-FPM. I comandi differiscono per ogni versione del sistema operativo, utilizza quelli che corrispondono al tuo sistema installato.
Ubuntu 20.04 LTS
sudo apt-get install php7.4-fpm
sudo a2dismod php7.4
sudo a2enconf php7.4-fpm
sudo a2enmod proxy_fcgi
Debian 10
sudo apt-get install php7.3-fpm
sudo a2dismod php7.3
sudo a2enconf php7.3-fpm
sudo a2enmod proxy_fcgi
Ubuntu 18.04 LTS
sudo apt-get install php7.2-fpm
sudo a2dismod php7.2
sudo a2enconf php7.2-fpm
sudo a2enmod proxy_fcgi
Debian 9
sudo apt-get install php7.0-fpm
sudo a2dismod php7.0
sudo a2enconf php7.0-fpm
sudo a2enmod proxy_fcgi
Abilita un MPM Apache compatibile con HTTP/2
Per impostazione predefinita, Apache utilizzerà l'MPM prefork. Questo MPM non è compatibile con HTTP/2, quindi dovremo sostituirlo con il più moderno modulo mpm_event.
Innanzitutto, disabilitiamo il modulo mpm_prefork:
sudo a2dismod mpm_prefork
Quindi abilitiamo il modulo mpm_event:
sudo a2enmod mpm_event
Abilita il supporto HTTP/2 in Apache
Per far funzionare HTTP/2 su Apache è necessario abilitare e caricare i moduli SSL e HTTP/2. Per farlo, puoi eseguire quanto segue nel tuo terminale:
sudo a2enmod ssl
e poi
sudo a2enmod http2
Per attivare questi nuovi moduli, devi eseguire:
sudo systemctl restart apache2
Dopo aver abilitato e caricato i moduli Apache necessari, vai alla directory di configurazione di Apache e modifica la configurazione di Apache.
Per abilitare HTTP/2 sul tuo server web Apache, aggiungi una delle seguenti opzioni alla tua configurazione globale di Apache o all'interno di un particolare host virtuale.
Protocols h2 http/1.1
Ecco la configurazione minima del server virtuale che può essere utilizzata per abilitare HTTP/2 in alcuni host virtuali:
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/public_html/example.com
SSLEngine on
SSLCertificateKeyFile /path/to/private.pem
SSLCertificateFile /path/to/cert.pem
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
Protocols h2 http/1.1
</VirtualHost>
Per verificare se il tuo server supporta HTTP/2, puoi utilizzare gli strumenti di sviluppo del browser. Di seguito sono gli screenshot dei browser Google Chrome e Apple Safari che mostrano HTTP/2 in azione su https://example.com dominio.
Chrome
Safari
Link
- RFC 7540
- HTTP/2