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.
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
Safari