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

HTTP/2 en el navegador Chrome

Protocolo de transferencia de hipertexto versión 2 (HTTP/2) es la última versión del protocolo HTTP, publicada como estándar IETF en RFC 7540 en 2015. El enfoque del protocolo es el rendimiento; específicamente, la latencia percibida por el usuario final, la red y el uso de recursos del servidor. Uno de los principales objetivos 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 tiene soporte HTTP/2 desde la versión 2.4.17. En este tutorial, supondré que ya tiene una configuración de TLS en funcionamiento, que tiene instalada la versión de Apache requerida en la distribución de Linux de su elección y que sabe cómo usar Let’s Encrypt, o sabe cómo emitir un certificado autofirmado.

Este tutorial ha sido probado en Debian 10Debian 9, Ubuntu 20.04 LTS, y Ubuntu 18.04 LTS.

requisitos previos

Para habilitar HTTP/2 en Apache, deberá cumplir con los siguientes requisitos:

  • Primero, debe habilitar HTTPS en su servidor. Todos los principales navegadores permiten usar HTTP/2 solo sobre HTTPS. Además, TLS Se requiere una versión de protocolo >= 1.2 con suites de cifrado modernas.
  • A continuación, asegúrese de que está ejecutando Apache 2.4.17 o superior porque HTTP/2 es compatible desde esta versión en adelante.
  • Además, asegúrese de que su cliente/navegador admita HTTP/2.

Deshabilitar el módulo mod_php

Antes de que podamos cambiar el módulo MPM de Apache en el siguiente paso a mpm_event, tendremos que deshabilitar el antiguo modo mod_php y reemplazarlo con el modo PHP-FPM más moderno. Los comandos difieren para cada versión del sistema operativo, utilice los que coincidan con su sistema instalado.

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

Habilite un Apache MPM que sea compatible con HTTP/2

De forma predeterminada, Apache usará el prefork MPM. Este MPM no es compatible con HTTP/2, por lo que tendremos que sustituirlo por el módulo mpm_event más moderno.

Primero, deshabilitamos el módulo mpm_prefork:

sudo a2dismod mpm_prefork

Luego habilitamos el módulo mpm_event:

sudo a2enmod mpm_event

Habilite la compatibilidad con HTTP/2 en Apache

Para que HTTP/2 funcione en Apache, debe habilitar y cargar los módulos SSL y HTTP/2. Para hacerlo, puede ejecutar lo siguiente en su terminal:

sudo a2enmod ssl

y entonces

sudo a2enmod http2

Para activar estos nuevos módulos, debe ejecutar:

sudo systemctl restart apache2

Después de habilitar y cargar los módulos de Apache necesarios, navegue hasta el directorio de configuración de Apache y edite la configuración de Apache.

Para habilitar HTTP/2 en su servidor web Apache, agregue uno de los siguientes a su configuración global de Apache o dentro de un host virtual en particular.

Protocols h2 http/1.1

Esta es la configuración mínima del servidor virtual que se puede usar 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 su servidor es compatible con HTTP/2, puede utilizar las herramientas de desarrollo de su navegador. Las siguientes son capturas de pantalla de los navegadores Google Chrome y Apple Safari que muestran HTTP/2 en acción en el dominio https://example.com.

Cromo

HTTP/2 en el navegador ChromeAnuncio publicitario

Safari

HTTP/2 en el navegador Safari

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *