Cómo habilitar HTTP/2 en Apache en Ubuntu


Desde el inicio 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, si bien incluye mejoras de funciones y optimizaciones de rendimiento para abordar las deficiencias de versiones anteriores, no alcanza algunas otras características destacadas que han sido abordadas por HTTP/2.

El protocolo HTTP/1.1 está plagado de las siguientes deficiencias que lo hacen menos ideal, especialmente cuando se ejecutan servidores web de alto 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 para cada 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 avalancha de conexiones TCP paralelas para procesar simultáneamente las solicitudes. Esto conduce a la congestión de TCP y, en última instancia, al desperdicio de ancho de banda y degradación de la red.

Los problemas mencionados anteriormente a menudo conducen a una 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.

Ofrece las siguientes ventajas:

  1. Compresión de encabezado que minimiza las solicitudes del cliente y, por lo tanto, reduce el consumo de ancho de banda. El efecto resultante son velocidades de carga de página rápidas.
  2. Multiplexar varias solicitudes a través de una conexión TCP. Tanto el servidor como el cliente pueden dividir una solicitud HTTP en varios marcos y reagruparlos en el otro extremo.
  3. Rendimiento web más rápido que, en consecuencia, conduce a una mejor clasificación de SEO.
  4. Seguridad mejorada ya que la mayoría de los navegadores convencionales cargan HTTP/2 a través de HTTPS.
  5. HTTP/2 se considera más compatible con dispositivos móviles gracias a la función de compresión de encabezado.

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

Antes de comenzar, asegúrese de habilitar HTTPS en el servidor web Apache antes de habilitar HTTP/2. Esto se debe a que todos los navegadores web convencionales admiten HTTP/2 sobre HTTPS. Tengo un nombre de dominio apuntado a una instancia en Ubuntu 20.04 que es el certificado Let's Encrypt.

Además, se recomienda que tenga Apache 2.4.26 y versiones posteriores para servidores de producción que tengan la intención de cambiar a HTTP/2.

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

$ apache2 -v

En el resultado, puede ver que estamos usando la última versión, que es Apache 2.4.41 en el momento de escribir este artículo.

Habilite HTTP/2 en un host virtual Apache

Para comenzar, 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 busque la columna "Protocolo".

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

$ sudo a2enmod http2

A continuación, ubique y edite su archivo de host virtual SSL. Si ha habilitado HTTPS con Let’s Encrypt, se crea un nuevo archivo con el 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 .

Protocols h2 http/1.1

Para guardar los cambios, reinicie el servidor web Apache.

$ sudo systemctl restart apache2

Para verificar si HTTP/2 está habilitado, busque los encabezados HTTP usando el siguiente comando curl como se muestra.

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

Debería obtener la salida mostrada.

HTTP/2 200

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

Cuando se usa el módulo mod_php con Apache

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

Si está utilizando el módulo mod_php de PHP 7.4, por ejemplo, desactívelo como se muestra a continuación:

$ sudo a2dismod php7.4 

A partir de entonces, desactive el módulo MPM prefork.

$ sudo a2dismod mpm_prefork

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

$ sudo a2enmod mpm_event proxy_fcgi setenvif

Instalar PHP-FPM en Ubuntu

A continuación, instale e inicie PHP-FPM como se muestra.

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

Luego habilite PHP-FPM para que se inicie en el momento del arranque.

$ sudo systemctl enable php7.4-fpm

A continuación, habilite PHP-FPM como el controlador PHP de Apache y reinicie el servidor web Apache para que se realicen los cambios.

$ sudo a2enconf php7.4-fpm

Habilitar la compatibilidad con HTTP/2 en Apache Ubuntu

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

$ sudo a2enmod http2

Reinicie Apache para sincronizar todos los cambios.

$ sudo systemctl restart apache2

Finalmente, puede probar si su servidor está usando el protocolo HTTP/2 usando el comando curl como se muestra.

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

También puede optar por utilizar las herramientas de desarrollador en el navegador Google Chrome para verificar como se documentó anteriormente. Tenemos hasta el final de esta guía. Esperamos que haya encontrado la información valiosa y que pueda habilitar HTTP/2 en Apache con facilidad.