Cómo habilitar HTTP/2 en Apache en Ubuntu

Desde la creación de la World Wide Web (www), el protocolo HTTP ha evolucionado a lo largo de los años para ofrecer contenido digital seguro y rápido a través de Internet.

La versión más utilizada es HTTP 1.1 y, aunque incluye mejoras de características y optimizaciones de rendimiento para abordar las deficiencias de versiones anteriores, carece de algunas características destacadas que han sido abordadas por HTTP/2.

¿Cuáles son las Limitaciones de HTTP/1.1?

El protocolo HTTP/1.1 está plagado de las siguientes deficiencias que lo hacen menos ideal, especialmente cuando se ejecutan servidores web con mucho tráfico:

  1. Retrasos en la carga de páginas web debido a encabezados HTTP largos.
  2. HTTP/1.1 solo puede enviar una solicitud por archivo por conexión TCP.
  3. Dado que HTTP/1.1 procesa una solicitud por cada conexión TCP, los navegadores se ven obligados a enviar una gran cantidad de conexiones TCP paralelas para procesar simultáneamente las solicitudes. Esto lleva a la congestión TCP y, en última instancia, al desperdicio de ancho de banda y la degradación de la red.

Los problemas mencionados anteriormente a menudo condujeron a la degradación del rendimiento y altos costos generales en el uso del ancho de banda. HTTP/2 entró en escena para abordar estos problemas y ahora es el futuro de los protocolos HTTP.

Ventajas de Usar HTTP/2

Ofrece las siguientes ventajas:

  1. Compresión de encabezados que minimiza las solicitudes del cliente y, por lo tanto, reduce el consumo de ancho de banda. El efecto resultante es una carga rápida de páginas.
  2. Multiplexando varias solicitudes sobre una conexión TCP. Tanto el servidor como el cliente pueden dividir una solicitud HTTP en varios marcos y volver a agruparlos en el otro extremo.
  3. Mejora el rendimiento web, lo que conduce a una mejor clasificación en SEO.
  4. Mejora la seguridad, ya que la mayoría de los navegadores principales cargan HTTP/2 sobre HTTPS.
  5. HTTP/2 se considera más amigable para dispositivos móviles gracias a la función de compresión de encabezados.

Dicho esto, vamos a habilitar HTTP/2 en Apache en Ubuntu 20.04 LTS y Ubuntu 18.04 LTS.

Prerrequisitos:

Antes de comenzar, asegúrate de habilitar HTTPS en el servidor web Apache antes de habilitar HTTP/2. Esto se debe a que todos los navegadores web principales admiten HTTP/2 sobre HTTPS. Tengo un nombre de dominio apuntando a una instancia en Ubuntu 20.04 que está ejecutando el servidor Apache asegurado usando un certificado Let’s Encrypt.

También se recomienda tener Apache 2.4.26 y versiones posteriores para servidores de producción que pretendan hacer un cambio a HTTP/2.

Para verificar la versión de Apache que estás ejecutando, ejecuta el comando:

$ apache2 -v
Check Apache Version in Ubuntu

Desde la salida, se puede ver que estamos utilizando la última versión, que es Apache 2.4.41 en el momento de escribir este artículo.

Habilitar HTTP/2 en un Virtual Host de Apache

Para empezar, primero confirme que el servidor web está ejecutando HTTP/1.1. Puede hacer esto en un navegador abriendo la sección de herramientas para desarrolladores en Google Chrome usando la combinación Ctrl +SHIFT + I. Haga clic en la pestaña ‘Red’ y localice la columna ‘Protocolo’.

Confirm HTTP Protocol Version

A continuación, habilite el módulo HTTP/2 en Ubuntu ejecutando el siguiente comando.

$ sudo a2enmod http2
Enable HTTP/2 on Ubuntu

A continuación, localice y edite su archivo de host virtual SSL, si ha habilitado HTTPS usando Let’s Encrypt, se crea un nuevo archivo con un sufijo le-ssl.conf.

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

Inserte la directiva a continuación después de la etiqueta <VirtualHost *:443>.

Protocols h2 http/1.1
Enable HTTP/2 on Apache

Para guardar los cambios, reinicie el servidor web de Apache.

$ sudo systemctl restart apache2

Para comprobar si HTTP/2 está habilitado, obtenga los encabezados HTTP utilizando el siguiente comando curl como se muestra.

$ curl -I --http2 -s https://domain.com/ | grep HTTP
Check HTTP/2 Support in Apache

Debería obtener la salida mostrada.

HTTP/2 200

En el navegador, recargue su sitio. Luego regrese a las herramientas para desarrolladores y confirme HTTP/2 indicado por la etiqueta h2 en la columna ‘Protocolo’.

Confirm HTTP/2 Protocol Version

Al usar el módulo mod_php con Apache

Si estás ejecutando Apache junto con el módulo mod_php, necesitas cambiar a PHP-FPM. Esto se debe a que el módulo mod_php utiliza el módulo prefork MPM que no es compatible con HTTP/2. Necesitas desinstalar el módulo prefork MPM y cambiar al módulo mpm_event que será compatible con HTTP/2.

Si estás utilizando el módulo PHP 7.4 mod_php, por ejemplo, desactívalo como se muestra:

$ sudo a2dismod php7.4 
Disable mod_php Module

Luego, desactiva el módulo prefork MPM.

$ sudo a2dismod mpm_prefork
Disable Prefork MPM in Apache

Después de desactivar los módulos, a continuación, habilita los módulos Event MPM, Fast_CGI y setenvif como se muestra.

$ sudo a2enmod mpm_event proxy_fcgi setenvif
Enable Event MPM in Apache

Instala PHP-FPM en Ubuntu

A continuación, instala y inicia PHP-FPM como se muestra.

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

Luego habilita PHP-FPM para que se inicie en el arranque.

$ sudo systemctl enable php7.4-fpm

A continuación, habilita PHP-FPM como manejador de PHP de Apache y reinicia el servidor web Apache para que los cambios surtan efecto.

$ sudo a2enconf php7.4-fpm

Habilita el Soporte para HTTP/2 en Apache Ubuntu

Luego habilita el módulo HTTP/2 como antes.

$ sudo a2enmod http2

Reinicia Apache para sincronizar todos los cambios.

$ sudo systemctl restart apache2

Finalmente, puedes probar si tu servidor está utilizando el protocolo HTTP/2 utilizando el comando curl como se muestra.

$ curl -I --http2 -s https://domain.com/ | grep HTTP
Check HTTP/2 Protocol in Apache

También puedes optar por utilizar las herramientas para desarrolladores en el navegador Google Chrome para verificar, como se documentó anteriormente. Hemos llegado al final de esta guía. Esperamos que hayas encontrado la información valiosa y que puedas habilitar HTTP/2 en Apache cómodamente.

Source:
https://www.tecmint.com/enable-http2-in-apache-on-ubuntu/