Cómo activar HTTP/2 en el servidor web Apache en Ubuntu y Debian

El Protocolo de Transferencia de Hipertexto Versión 2(HTTP/2) es la última versión del protocolo HTTP, publicada como norma del IETF en el RFC 7540 de 2015. El protocolo se centra en el rendimiento; concretamente, en la latencia percibida por el usuario final, la red y el uso de recursos del servidor. Un objetivo importante es permitir el uso de una única conexión desde los navegadores a un sitio Web. El protocolo es compatible con versiones anteriores, por lo que los métodos HTTP, los códigos de estado y la semántica son los mismos que para las versiones anteriores del protocolo. Apache es compatible con HTTP/2 desde la versión 2.4.17. En este tutorial, voy a suponer que ya tienes una configuración TLS que funciona, y que tienes instalada la versión necesaria de Apache en la distribución de Linux que elijas, y que sabes cómo utilizar Let’s Encrypt, o sabes cómo emitir un certificado autofirmado.

HTTP/2

Este tutorial se ha probado en Debian 11, Debian 10, Debian 9, Ubuntu 22.04 LTS, Ubuntu 20.04 LTS y Ubuntu 18.04 LTS.

Requisitos previos

Para habilitar HTTP/2 en Apache necesitarás cumplir los siguientes requisitos:

  • En primer lugar, necesitas habilitar HTTPS en tu servidor. Los principales navegadores permiten utilizar HTTP/2 sólo sobre HTTPS. Además, se requiere una versión del protocolo TLS >= 1.2 con suites de cifrado modernas.
  • A continuación, asegúrate de que estás ejecutando Apache 2.4.17 o superior, ya que HTTP/2 es compatible a partir de esta versión.
  • Asegúrate también de que tu cliente/navegador soporta HTTP/2.

Desactivar el módulo mod_php

Antes de poder cambiar el módulo MPM de Apache en el siguiente paso a mpm_event, tendremos que desactivar el antiguo modo mod_php y sustituirlo por el más moderno modo PHP-FPM. Los comandos difieren para cada versión de sistema operativo, por favor, utiliza los que coincidan con tu sistema instalado.

 

Ubuntu 22.04 LTS

sudo apt-get install php8.1-fpm
sudo a2dismod php8.1
sudo a2enconf php8.1-fpm
sudo a2enmod proxy_fcgi

Debian 11

sudo apt-get install php7.4-fpm
sudo a2dismod php7.4
sudo a2enconf php7.4-fpm
sudo a2enmod proxy_fcgi

Ubuntu 20.04 LTS

sudo apt-get install php7.4-fpm
sudo a2dismod php7.4
sudo a2enconf php7.4-fpm
sudo a2enmod proxy_fcgi

Debian 10

sudo apt-get install php7.3-fpm
sudo a2dismod php7.3
sudo a2enconf php7.3-fpm
sudo a2enmod proxy_fcgi

Ubuntu 18.04 LTS

sudo apt-get install php7.2-fpm
sudo a2dismod php7.2
sudo a2enconf php7.2-fpm
sudo a2enmod proxy_fcgi

Debian 9

sudo apt-get install php7.0-fpm
sudo a2dismod php7.0
sudo a2enconf php7.0-fpm
sudo a2enmod proxy_fcgi

Habilitar un MPM de Apache compatible con HTTP/2

Por defecto, Apache utilizará el MPM prefork. Este MPM no es compatible con HTTP/2, así que tendremos que sustituirlo por el módulo más moderno mpm_event.

Primero, desactivamos el módulo mpm_prefork:

sudo a2dismod mpm_prefork

A continuación, habilitamos el módulo mpm_event:

sudo a2enmod mpm_event

Habilitar el soporte HTTP/2 en Apache

Para que HTTP/2 funcione en Apache necesitas habilitar y cargar los módulos SSL y HTTP/2. Para ello, puedes ejecutar lo siguiente en tu terminal:

sudo a2enmod ssl

y luego

sudo a2enmod http2

Para activar estos nuevos módulos, tienes que ejecutar:

sudo systemctl restart apache2

Después de habilitar y cargar los módulos de Apache necesarios, navega a tu directorio de configuración de Apache y edita la configuración de Apache.

Para activar HTTP/2 en tu servidor web Apache añade una de las siguientes opciones a tu configuración global de Apache o dentro de un host virtual concreto.

Protocols h2 http/1.1

Aquí tienes la configuración mínima del servidor virtual que se puede utilizar para habilitar HTTP/2 en algún host virtual:

<VirtualHost *:443>
  ServerName example.com
  ServerAlias www.example.com
  DocumentRoot /var/www/public_html/example.com
  SSLEngine on
  SSLCertificateKeyFile /path/to/private.pem
  SSLCertificateFile /path/to/cert.pem
  SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
  Protocols h2 http/1.1
</VirtualHost>

Para comprobar si tu servidor admite HTTP/2, puedes utilizar las herramientas de desarrollo de tu navegador. A continuación se muestran capturas de pantalla de los navegadores Google Chrome y Apple Safari que muestran HTTP/2 en acción en el dominio https://example.com.

Chrome

HTTP/2 en el navegador Chrome

Safari

HTTP/2 en el navegador Safari

Enlaces

También te podría gustar...