Com habilitar HTTP/2 a Apache a Ubuntu


Des de la creació de la World Wide Web (www), el protocol HTTP ha evolucionat al llarg dels anys per oferir contingut digital segur i ràpid a Internet.

La versió més utilitzada és HTTP 1.1 i, tot i que inclou millores de funcions i optimitzacions de rendiment per abordar les deficiències de les versions anteriors, no té algunes altres funcions destacades que s'han abordat per HTTP/2.

El protocol HTTP/1.1 està ple de les següents deficiències que el fan menys ideal, especialment quan s'executen servidors web d'alt trànsit:

  1. Retards en la càrrega de pàgines web a causa de les capçaleres HTTP llargues.
  2. HTTP/1.1 només pot enviar una sol·licitud per a cada fitxer per connexió TCP.
  3. Atès que HTTP/1.1 processa una sol·licitud per cada connexió TCP, els navegadors es veuen obligats a enviar un diluvi de connexions TCP paral·leles per processar les sol·licituds simultàniament. Això comporta una congestió de TCP i, en última instància, un malbaratament d'ample de banda i una degradació de la xarxa.

Els problemes esmentats anteriorment sovint van provocar una degradació del rendiment i uns costos generals elevats en l'ús de l'ample de banda. HTTP/2 va entrar en escena per solucionar aquests problemes i ara és el futur dels protocols HTTP.

Ofereix els següents avantatges:

  1. Compressió de capçalera que minimitza les sol·licituds dels clients i, per tant, redueix el consum d'ample de banda. L'efecte resultant són velocitats ràpides de càrrega de la pàgina.
  2. Multiplexació de diverses sol·licituds mitjançant una connexió TCP. Tant el servidor com el client poden dividir una sol·licitud HTTP en diversos marcs i reagrupar-los a l'altre extrem.
  3. Rendiments web més ràpids que, per tant, condueixen a una millor classificació de SEO.
  4. Seguretat millorada ja que la majoria dels navegadors convencionals carreguen HTTP/2 mitjançant HTTPS.
  5. HTTP/2 es considera més adaptat per a mòbils gràcies a la funció de compressió de capçalera.

Dit això, habilitarem HTTP/2 a Apache a Ubuntu 20.04 LTS i Ubuntu 18.04 LTS.

Abans de començar, assegureu-vos d'habilitar HTTPS al servidor web Apache abans d'habilitar HTTP/2. Això es deu al fet que tots els navegadors web principals admeten HTTP/2 sobre HTTPS. Tinc un nom de domini apuntat a una instància a Ubuntu 20.04 que és el certificat Let's Encrypt.

A més, es recomana que tingueu Apache 2.4.26 i versions posteriors per als servidors de producció que tinguin la intenció de fer un canvi a HTTP/2.

Per comprovar la versió d'Apache que esteu executant, executeu l'ordre:

$ apache2 -v

A la sortida, podeu veure que estem utilitzant la darrera versió, que és Apache 2.4.41 en el moment de redactar aquest article.

Habiliteu HTTP/2 en un host virtual Apache

Per començar, primer confirmeu que el servidor web està executant HTTP/1.1. Podeu fer-ho en un navegador obrint la secció d'eines per a desenvolupadors a Google Chrome mitjançant la combinació Ctrl + MAJÚS + I. Feu clic a la pestanya Xarxa i localitzeu la columna Protocol.

A continuació, activeu el mòdul HTTP/2 a Ubuntu executant l'ordre següent.

$ sudo a2enmod http2

A continuació, localitzeu i editeu el vostre fitxer d'amfitrió virtual SSL, si heu habilitat HTTPS mitjançant Let's Encrypt, es crea un fitxer nou amb un sufix le-ssl.conf.

$ sudo vim /etc/apache2/sites-enabled/your-domain-name-le-ssl.conf

Inseriu la directiva següent després de l'etiqueta .

Protocols h2 http/1.1

Per desar els canvis, reinicieu el servidor web Apache.

$ sudo systemctl restart apache2

Per comprovar si HTTP/2 està habilitat, obteniu les capçaleres HTTP mitjançant l'ordre curl següent, tal com es mostra.

$ curl -I --http2 -s https://domain.com/ | grep HTTP

Hauríeu d'obtenir la sortida que es mostra.

HTTP/2 200

Al navegador, torneu a carregar el vostre lloc. A continuació, torneu a les eines de desenvolupament i confirmeu HTTP/2 indicat per l'etiqueta h2 a la columna Protocol.

Quan utilitzeu el mòdul mod_php amb Apache

Si esteu executant Apache juntament amb el mòdul mod_php, haureu de canviar a PHP-FPM. Això es deu al fet que el mòdul mod_php utilitza el mòdul MPM prefork que no és compatible amb HTTP/2. Heu de desinstal·lar el prefork MPM i canviar al mòdul mpm_event que serà compatible amb HTTP/2.

Si utilitzeu el mòdul PHP 7.4 mod_php, per exemple, desactiveu-lo tal com es mostra:

$ sudo a2dismod php7.4 

A continuació, desactiveu el mòdul MPM prefork.

$ sudo a2dismod mpm_prefork

Després de desactivar els mòduls, a continuació, activeu els mòduls Event MPM, Fast_CGI i setenvif tal com es mostra.

$ sudo a2enmod mpm_event proxy_fcgi setenvif

Instal·leu PHP-FPM a Ubuntu

A continuació, instal·leu i inicieu PHP-FPM tal com es mostra.

$ sudo apt install php7.4-fpm 
$ sudo systemctl start php7.4-fpm

A continuació, activeu PHP-FPM perquè s'iniciï en el moment de l'arrencada.

$ sudo systemctl enable php7.4-fpm

A continuació, activeu PHP-FPM com a controlador de PHP d'Apache i reinicieu el servidor web Apache perquè es realitzin els canvis.

$ sudo a2enconf php7.4-fpm

Activeu el suport HTTP/2 a Apache Ubuntu

A continuació, activeu el mòdul HTTP/2 com abans.

$ sudo a2enmod http2

Reinicieu Apache per sincronitzar tots els canvis.

$ sudo systemctl restart apache2

Finalment, podeu provar si el vostre servidor utilitza el protocol HTTP/2 mitjançant l'ordre curl tal com es mostra.

$ curl -I --http2 -s https://domain.com/ | grep HTTP

També podeu optar per utilitzar les eines per a desenvolupadors del navegador Google Chrome per verificar com s'ha documentat anteriorment. Hem d'arribar al final d'aquesta guia. Esperem que la informació sigui valuosa i que pugueu habilitar HTTP/2 a Apache amb facilitat.