Búsqueda de sitios web

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 en todo el mundo. 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.

¿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 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 las solicitudes simultáneamente. Esto conduce a la congestión de TCP y, en última instancia, al desperdicio de ancho de banda y a la degradación de la red.

Los problemas antes mencionados a menudo condujeron 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.

Ventajas de utilizar HTTP/2

Ofrece las siguientes ventajas:

  1. Compresión de encabezado que minimiza las solicitudes de los clientes y, por lo tanto, reduce el consumo de ancho de banda. El efecto resultante son velocidades de carga de página rápidas.
  2. Multiplexación de 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. Rendimientos web más rápidos que, en consecuencia, conducen a una mejor clasificación 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 encabezados.

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

Requisitos previos:

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 que apunta a una instancia en Ubuntu 20.04 que ejecuta un servidor Apache protegido mediante el certificado Let's Encrypt.

Además, se recomienda tener Apache 2.4.26 y versiones posteriores para servidores de producción que deseen realizar un cambio a HTTP/2.

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

apache2 -v

En el resultado, puede ver que estamos utilizando 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. Puedes hacer esto en un navegador abriendo la sección de herramientas de desarrollador 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 usando Let's Encrypt, se crea un nuevo archivo con le-ssl.conf sufijo.

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

Inserte la siguiente directiva 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, obtenga los encabezados HTTP usando el siguiente comando curl como se muestra.

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

Debería obtener el resultado que se muestra.

HTTP/2 200

En el navegador, recarga tu sitio. Luego regrese a las herramientas de desarrollador y confirme HTTP/2 indicado por la etiqueta h2 en la columna "Protocolo".

Cuando se utiliza 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 MPM previo al fork y cambiar al módulo mpm_event que será compatible con HTTP/2.

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

sudo a2dismod php7.4 

A continuación, desactive el módulo MPM de prefork.

sudo a2dismod mpm_prefork

Después de deshabilitar los módulos, 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 controlador PHP de Apache y reinicie el servidor web Apache para que se realicen los cambios.

sudo a2enconf php7.4-fpm

Habilite 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. Hemos llegado al final de esta guía. Esperamos que la información le haya resultado valiosa y que pueda habilitar HTTP/2 en Apache con facilidad.