in HowTo

Sfruttare http2 per aumentare le performance del webserver

Ci siamo appassionati ad http2 ispirati da questo <a href=”https://kinsta task manager app.com/learn/what-is-http2/”>articolo di Kinsta, grazie ad una segnalazione di Smashing Magazine, abbiamo deciso di mettere alla prova le potenzialità di questo nuovo protocollo (nuovo si fa per dire), configurare un server ex-novo e di fare un po’ di benchmark per vedere se ne vale la pena. E ne vale la pena.

Ma andiamo per ordine e cominciamo dall’inizio.

Installazione di Ubuntu 16.04 LTS

Siamo andati su digitalocean.com e abbiamo creato in fretta e furia una droplet da $5 con installato Ubuntu 16.04 LTS. Una volta collegati via ssh abbiamo installato apache2 (precisamente la versione 2.4.18) e purtroppo ci siamo resi conto che il modulo per http2 non era presente.

E’ cominciata così la ricerca di una soluzione che si è conclusa con la seguente procedura:

$ sudo -i
$ apt-get install python-software-properties
$ add-apt-repository -y ppa:ondrej/apache2
$ apt-key update
$ apt-get update

Questa sequenza consente di utilizzare l’ultimo repository di apache2 al sistema e di aggiornare la lista dei pacchetti (moduli inclusi) disponibili.

$ apt-get --only-upgrade install apache2 -y
$ a2enmod http2

Così facendo il mod è caricato e si può aggiungere la relativa configurazione al virtual host relativo:

# Estratto di una configurazione per un vhost in https
<VirtualHost *:443>
 # per abilitare h2 sul server
 Protocols h2 http/1.1

 # il resto della configurazione va qui
 # ...
</VirtualHost>

Una piccola (?!) annotazione. http2 è un protocollo nato per funzionare anche senza https. L’implementazione dei browser invece vuole che quasi tutti i browser riconoscano http2 se e solo se attraverso una connessione https. Ma per questo abbiamo bisogno di configurare il nostro virtual host perché risponda su https (allo scopo abbiamo utilizzato “let’s encrypt” per avere un certificato a costo zero!).

Funziona?

Una volta configurato tutto come testare se il nostro server risponde effettivamente in questa modalità? Due opzioni: una facile facile ed una complicata complicata.

Subito la prima, ovvero è sufficiente scaricare l’estensione di Chrome “Spdy Indicator” per avere una bella iconcina in alto a destra che ci aiuta a capire con che protocollo sta lavorando il sito che stiamo navigando nel tab.

La seconda consiste nell’utilizzare curl da riga di comando. Ma qui nascono i problemi (o almeno lo sono stati per noi…). Curl per come viene distribuito su ubunto non contiene il modulo http2. Benone! Allora che fare? Semplice ricompilare Curl con il supporto ad http2 ed il gioco è fatto. Per percorrere questa strada basta leggere quest’articolo (veramente fatto bene) e seguire le istruzioni. Noi l’abbiamo fatto con un accorgimento ovvero scaricare la versione 7.48. Tutto qui.

Dopo un p0′ di compilazioni e download vari (compresa soprattutto installazione di nghttp2) avrete un curl capace di intendere e volere il nuovo protocollo.

Performance di http2

Ok funziona. Il webserver gira a dovere ed il nostro indicatore SPDY ci dice che stiamo lavorando in http2. Bene, ma quali sono le performance?

Le performance sono visibili a vista d’occhio!

 

Riferimenti utili
  • https://kinsta.com/learn/what-is-http2/
  • https://www.smashingmagazine.com/
  • http://pixelinc.co/ubuntu-14-04-3-apache-http-2-web-server-setup/
  • https://github.com/rauchg/chrome-spdy-indicator
  • https://serversforhackers.com/video/curl-with-http2-support
  • https://httpd.apache.org/download.cgi#apache24
  • https://letsencrypt.org/getting-started/

 

Scrivi un commento

Commento