Cómo activar HTTP/2 en Apache (Rocky Linux 9)

Publicada:

Si usas apache como tu servidor web, y estás usando la versión que viene con Rocky Linux 9, la 2.4.57, tienes suerte, porque soporta el uso de HTTP/2 y no tienes que hacer nada para que esté funcionando. Aun así, vamos a comprobar que necesitas y ver que ganas frente al uso de HTTP1.1.

El soporte para HTTP/2 en Apache fue introducido en la versión 2.4.17 (2015). Rocky Linux 9, al ser una distribución reciente basada en Red Hat Enterprise Linux, incluye la versión de Apache 2.4.57.

HTTP/2  vs. HTTP/1.1

Te puedes imaginar que las ventajas son muchas, pero las principales son que HTTP/2 aporta mejor rendimiento y menor latencia a la hora de servir tus páginas web.

HTTP/1.1HTTP/2
Fecha de soporte inicial en Apache19972015 (Apache 2.4.17)
Porcentaje de uso actual (2024)Más del 60 %35.4 %
Principales ventajasEstabilidad, compatibilidad ampliaMejor rendimiento, menor latencia, multiplexación de streams

¿Qué debes conocer de HTTP/2?

Lo mejor es ir directamente a la documentación de apache: https://httpd.apache.org/docs/2.4/es/howto/http2.html.

  • HTTP/2 es un protocolo binario, al contrario que HTTP 1.1 que es texto plano.
  • h2 es HTTP/2 sobre TLS.
  • h2c es HTTP/2 sobre TCP.
  • Un frame es la unidad más pequeña de comunicación dentro de una conexión HTTP/2, que consiste en una cabecera y una secuencia de octetos de longitud variable estructurada de acuerdo con el tipo de frame.
  • Un stream es un flujo bidireccional de frames dentro de una conexión HTTP/2. El concepto correspondiente en HTTP 1.1 es un intercambio de mensajes de solicitud/respuesta.
  • HTTP/2 es capaz de llevar múltiples streams de datos sobre la misma conexión TCP.

Necesitas tener activo el módulo de Apache mod_http2 y un servidor con soporte SSL.

Su uso en Rocky Linux 9

Ya te he dicho, que si tienes instalado apache en tu servidor Rocky Linux, todo debería de funcionar sin mucho problema.

Vete a /etc/httpd/conf.modules.d/10-h2.conf. Tienes que tener algo como esto:

Contenido del archivo de Aapche  /etc/httpd/conf.modules.d/10-h2.conf
LoadModule http2_module modules/mod_http2.so
<IfModule !mpm_prefork>
    Protocols h2 h2c http/1.1
</IfModule>

Este significa, que la configuración de Apache está cargando el módulo mod_http2 que implementa el protocolo HTTP/2.

  • h2: Este es el protocolo HTTP/2 sobre conexiones TLS (HTTPS).
  • h2c: Este es el protocolo HTTP/2 sobre conexiones TCP (sin cifrado, HTTP).
  • http/1.1: Este es el protocolo HTTP/1.1, que garantiza compatibilidad con clientes que no soportan HTTP/2.

El orden es importante. Al poner h2 primeros estamos diciendo que preferimos este protocolo primero.

También lo puedes comprobar con este comando:

httpd -M | grep http2

Y que solo lo hace si el módulo mpm_prefork no está cargado.

Si tienes todo esto configurado, significa que tu web ya está usando HHTP/2.

Si no tienes el módulo mod_http2 instalado, lo puedes hacer con sudo dnf install mod_http2

¡Dato! Te recomiendo que uses mpm_worker o mpm_event:

MPMModeloUso de memoriaCompatibilidad con HTTP/2Uso
mpm_preforkMultiprocesoAltoNoAplicaciones no seguras para hilos
mpm_workerMultiproceso y multihiloModeradoServidores de alto tráfico y múltiples solicitudes concurrentes
mpm_eventMultiproceso y multihiloModeradoManejo eficiente de conexiones persistentes (Keep-Alive)

Si pones en línea de comandos:

apachectl -V

Te va a salir el modo que tienes activo y otra mucha información.

Si quieres cambiar el MPM que usa Apache, solo tienes que buscar en tu archivo de configuración de apache lo siguiente y poner esto:

# Deshabilitar mpm_prefork si está habilitado
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# Habilitar mpm_event
LoadModule mpm_event_module modules/mod_mpm_event.so

En el caso de una instalación de Rocky Linux 9, lo vas a encontrar en: /etc/httpd/conf.modules.d/00-mpm.conf:

# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines.  See the httpd.conf(5) man
# page for more information on changing the MPM.

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#
# NOTE: If enabling prefork, the httpd_graceful_shutdown SELinux
# boolean should be enabled, to allow graceful stop/shutdown.
#
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
LoadModule mpm_event_module modules/mod_mpm_event.so

Como puedes ver, yo tengo activado mod_mpm_event.so. Es la mejor opción si estás usando PHP FPM.

Vale, ya nos hemos asegurado de tener un MPM compatible con HTTP/2 y que la configuración de apache está cargando el módulo mod_http2.so. ¡Ojo! Tienes que tener activo SSL en tu servidor, algo que es sencillo si usas Let’s Encrypt (no me meto en este artículo sobre como configurarlo, hay muy buenas opciones online donde te lo explican).

Otras cosas a tener en cuenta

Con la configuración anterior en /etc/httpd/conf.modules.d/10-h2.conf, estás aplicando toda la configuración todos tus virtual hosts (si tienes varios dominios instalados en tu servidor se aplica a todos al mismo tiempo).

Si quieres separar un poco las configuraciones, puedes aplicar la directiva Protocols a cada Virtual Host de la siguiente manera:

<VirtualHost *:443>
    ServerName www.ejemplo.com
    
    # Otros ajustes...

    Protocols h2 http/1.1
</VirtualHost>

Lo importante en esta regla anterior, es que estamos aplicando la configuración a nuestro dominio con SSL configurado, es decir, que funciona con HTTPS (:443), por lo que solo ponemos en Protocols, h2 http/1.1.

Después de aplicar todos los cambios, reinicia el servidor Apache:

sudo systemctl restart httpd

¿Cómo compruebas que está activo? Con este comando:

curl -I -k -s --http2 https://tupaginaweb.com

Vas a obtener algo como esto (verás HTTP/2 200):

Comprobamos que nuestra web soporta HTTP/2 con este comando de Curl.

¡Dato! Casi todos los navegadores modernos dan soporte a HTTP/2, pero solo en conexiones SSL:

soporte navegadores web a HTTP/2

¿Puedes implementar HTTP/2 de otra manera en tu servidor?

Sí. Puedes hacerlo si gestionas tus DNS con Cloudflare. Solo tienes que ir a Speed > Optimización > Optimización de protocolo. Está activado por defecto en todos los dominios gratuitos y de pago.

Activando HTTP/@ en Cloudflare en Speed > Optimización > Optimización de protocolo

Y ya que nos ponemos, podemos activar también De HTTP/2 a Origen, que te va a permitir solicitudes HTTP/2 entre Cloudflare’s Edge y tu servidor:

De HTTP/2 a Origen, que te va a permitir solicitudes HTTP/2 entre Cloudflare's Edge y tu servidor:

Para que esta segunda aparte funcione, tienes que tener activo HTTP/2 en tu servidor. Si no lo tienes activo, solo se va a conectar mediante HTTP1.1.

La moraleja de esto, es que si no quieres activar HTTP/2 en tu servidor, con Cloudflare lo vas a poder hacer sin hacer nada, y tus visitantes se van a beneficiar de esta opción fácilmente. Pero es totalmente recomendable tenerla activa en el servidor para luego conectar con Cloudflare de manera más rápida. Tú decides.

Con Cloudflare puedes hacer otras muchas cosas como por ejemplo: Cómo bloquear BOTS AI y SEO con Cloudflare, Cómo configurar las Cache Rules de Cloudflare para WordPress.


Descubre más desde algoentremanos.com

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Foto del autor

Ivan Benito

Apasionado de la lectura y los viajes, experto en tecnología e informática y fan de la privacidad online. Desde el año 2007 me he dedicado al SEO, a escribir y a crear páginas web con WordPress sobre todo tipo de temáticas. Si tienes alguna duda y necesitas ayuda... ¡Pregúntame!

Si tienes preguntas, quieres que hagamos una review de una app, programa o producto, simplemente mándanos un e-mail mediante nuestro formulario de contacto. Te contestaremos en el menor tiempo posible. ¡Muchas gracias y salU2! Algoentremanos realiza reviews de manera profesional y en muchas ocasiones recibimos compensación de las compañías cuyos productos revisamos. Probamos cada producto a fondo y otorgamos altas calificaciones solo a los mejores. La propiedad de Algoentremanos.com es independiente y las opiniones expresadas aquí son solo nuestras. Algunos enlaces del artículo son afiliados: pueden generar un beneficio a algoentremanos.com. Saber más.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.