mod_http3 0.0.74: HTTP/3 en Apache mantiene la conexión al cambiar de red, usa menos memoria y funciona en CentOS 7

mod_http3 0.0.74 for Apache httpd: QUIC migration with several processes via eBPF, less memory per connection, HTTP/3 on CentOS 7

Respuesta corta. mod_http3 0.0.74, publicado el 30 de octubre de 2026, trae tres cambios al módulo HTTP/3 de Apache httpd. Primero: con ListenCoresBucketsRatio (varios procesos HTTP/3) un pequeño programa eBPF en el kernel de Linux envía cada paquete QUIC al proceso que tiene su conexión, así un teléfono que pasa de Wi-Fi a datos móviles mantiene la conexión. Segundo: cada conexión usa menos memoria, unos 7,5 KB menos en la capa QUIC. Tercero: un cliente ya no puede poner en el mapa un ID de conexión de otra conexión. No hace falta cambiar la configuración. Los paquetes RPM para CentOS 7, RHEL, AlmaLinux, Rocky Linux y Oracle Linux 8 a 10 y DEB para Ubuntu 22.04 y 24.04 están en el repositorio estable de CodeIT.

CentOS 7 llegó al fin de su vida en junio de 2024, pero muchos servidores aún lo usan. Con los paquetes de CodeIT reciben la misma pila HTTP/3 que EL10: Apache httpd 2.4.69, OpenSSL 4.0, ngtcp2, nghttp3 y mod_http3 0.0.74. A continuación: por qué importa cada cambio, qué funciona en cada kernel, cómo lo probamos y cómo instalarlo en 15 minutos. La versión anterior: mod_http3 ya está en trunk de Apache httpd; CodeIT mod_http3 0.0.73 sobre ngtcp2 ya es estable.

Datos clave, mod_http3 0.0.74

  • Versión: mod_http3 v0.0.74, 30 de octubre de 2026. Paquetes mod_http3-0.0.74-1.codeit (CentOS 7 a EL10) y libapache2-mod-http3 0.0.74-1codeit (Ubuntu 22.04, 24.04), en el repositorio estable de CodeIT.
  • Migración con varios procesos: el byte 0 de cada ID de conexión del servidor guarda el bucket del proceso; un programa eBPF SK_REUSEPORT envía cada paquete a ese bucket. Linux 4.19 o posterior.
  • Modo de reserva: si el programa no se carga (kernel antiguo, SELinux, sin CAP_BPF), un aviso da la causa y el servidor funciona como 0.0.73: pide a los clientes que no migren.
  • Memoria: ya no hay un pool APR (8 KB como mínimo) por conexión QUIC; lo sustituyen 16 casillas para IDs (512 bytes). Los asignadores de sesión y de stream guardan como máximo MaxMemFree.
  • Seguridad: un paquete Initial con el ID de otra conexión ya no cambia el mapa de conexiones.
  • CentOS 7: HTTP/3, 0-RTT, ECN, varios procesos HTTP/3 y el ahorro de memoria funcionan; el enrutado eBPF y GSO necesitan un kernel más nuevo.
  • Compatibilidad: sin directivas nuevas ni cambios de configuración.

Novedades de mod_http3 0.0.74

  • Migración de conexiones con varios procesos HTTP/3 (Linux 4.19 o posterior).
  • Menos memoria por conexión en la capa QUIC y un límite a la memoria retenida por los asignadores de sesión y de stream.
  • Una corrección en el mapa de IDs de conexión, para que un cliente no pueda cambiar cómo se encuentran los paquetes de otra conexión.

Por qué importa la migración: la conexión sigue al cambiar de red

Una conexión QUIC no está atada a una dirección IP y un puerto. Tiene IDs de conexión. Cuando un teléfono pasa de Wi-Fi a datos móviles, o un NAT da al cliente un puerto nuevo, el cliente sigue con la misma conexión desde la dirección nueva, y la descarga o la videollamada continúa. Es la migración de conexión, una de las grandes ventajas de HTTP/3 sobre HTTP/2 con TCP.

Con ListenCoresBucketsRatio, mod_http3 0.0.72 y posteriores sirven HTTP/3 desde varios procesos, cada uno con su socket SO_REUSEPORT. Sin ayuda, el kernel elige el socket por un hash de la dirección del cliente. Una dirección nueva da un hash nuevo, y el paquete puede llegar a un proceso que no conoce la conexión. La conexión se detiene y el cliente debe conectar de nuevo. Por eso 0.0.73 pedía a los clientes que no migraran. 0.0.74 quita este límite:

  1. Cada proceso escribe su número de bucket en el byte 0 de cada ID de conexión que da a los clientes. Los demás bytes siguen siendo aleatorios.
  2. El proceso padre de httpd carga un programa eBPF en el kernel y lo une al grupo de sockets. El programa lee el byte 0 del ID de destino y elige el socket de ese bucket. Esto ocurre en el kernel, antes de que el paquete llegue a un proceso: sin copias extra ni reenvío entre procesos.
  3. Un paquete sin un bucket válido, por ejemplo el primer Initial de un cliente, va por el hash habitual.

El programa son 24 instrucciones BPF escritas a mano en el módulo. Los paquetes no necesitan clang ni libbpf. Si el kernel rechaza el programa, el registro de errores dice QUIC routing by connection ID is off con la causa, y el servidor funciona como 0.0.73.

Por qué importa el ahorro de memoria

Las conexiones HTTP/3 duran mucho y pasan la mayor parte del tiempo inactivas: el navegador las mantiene abiertas entre páginas. Un servidor con muchos clientes guarda miles de conexiones inactivas en cada proceso. Unos pocos kilobytes por conexión se convierten en muchos megabytes.

Antes de 0.0.74 cada conexión QUIC tenía su propio pool de memoria APR. Un pool APR ocupa como mínimo un bloque de 8 KB, pero la conexión solo guardaba en él unos pocos IDs. 0.0.74 guarda los IDs en 16 casillas dentro de la conexión y crea el búfer CONNECTION_CLOSE de 1500 bytes solo al cerrar.

0.0.730.0.74
Almacén de IDs por conexiónpool APR, 8 KB o más16 casillas, 512 bytes
Búfer CONNECTION_CLOSEen el poolsolo al cerrar
10.000 conexiones abiertas en un procesounos 80 MBunos 5 MB
Memoria libre retenida por un asignador de sesiónsin límiteMaxMemFree (2 MB por defecto)

Las cifras se calculan a partir del tamaño de las estructuras, no se midieron; ngtcp2 y OpenSSL usan su propia memoria por conexión. El límite MaxMemFree es el mismo que usa mod_http2: una conexión inactiva devuelve la memoria que supera el límite.

Una corrección en el mapa de IDs de conexión

El cliente elige el ID de destino de su primer paquete Initial. Antes de 0.0.74 un cliente podía elegir un ID que ya tenía otra conexión. El mapa asociaba entonces ese ID a la nueva conexión y conservaba una clave de la conexión antigua; al cerrarse la antigua, la clave apuntaba a memoria liberada. 0.0.74 no añade un ID que ya tiene otra conexión.

Súper HTTP/3 en CentOS 7

Red Hat dejó de actualizar CentOS Linux 7 el 30 de junio de 2024. Muchos servidores no pueden migrar pronto: aplicaciones antiguas, pilas certificadas, appliances. Su Apache de la distribución es 2.4.6, de 2013, sin HTTP/2 ni HTTP/3.

El repositorio de CodeIT compila toda la pila actual para CentOS 7 y RHEL 7 (x86_64): Apache httpd 2.4.69, OpenSSL 4.0, nghttp2, ngtcp2, nghttp3, mod_http2 y mod_http3 0.0.74, las mismas versiones que para EL10. mod_http3 comprueba las funciones del kernel al arrancar y usa lo que hay. En el kernel 3.10 de CentOS 7:

FunciónCentOS 7 (3.10)EL8 (4.18)EL9, EL10Ubuntu 22.04, 24.04
HTTP/3, 0-RTT, ECN, respuesta desde la dirección correcta✓✓✓✓
Varios procesos HTTP/3 (ListenCoresBucketsRatio)✓✓✓✓
Menos memoria por conexión (0.0.74)✓✓✓✓
GSO: muchos paquetes en un envío (Linux 4.18+)–✓✓✓
Migración con varios procesos (eBPF, Linux 4.19+)–ver el registroSELinux: ver abajo✓

En CentOS 7 el programa eBPF no se carga: el registro muestra un aviso y, con varios procesos, el servidor pide a los clientes que no migren, como 0.0.73. Con un solo proceso la migración funciona en cualquier kernel. En EL con SELinux en modo enforcing la política puede rechazar el programa; el registro da la causa, y el módulo de política de ejemplo lo permite. Ese módulo da más poder a httpd, así que no lo instalamos por usted.

Cómo probamos 0.0.74

  • Una prueba nueva mueve el cliente a un puerto local nuevo seis veces, una de ellas también a un ID nuevo, con dos procesos HTTP/3. Tras cada cambio la conexión debe responder a un PING. Pasó tres ejecuciones seguidas.
  • La misma prueba sin enrutado (sin permiso para BPF, el comportamiento de 0.0.73) falla en cada ejecución: tras uno a tres cambios el paquete llega al otro proceso.
  • Una prueba comprueba que todos los IDs del servidor llevan el mismo byte de bucket y que disable_active_migration solo se envía sin enrutado.
  • El programa BPF también se probó solo en Linux 5.15: 80 de 80 paquetes llegaron al socket de su ID; los paquetes cortos, los IDs vacíos y los buckets desconocidos fueron por el hash.
  • Suite completa en la imagen de pruebas compilada desde el código: 148 pasan, 4 omitidas con enrutado; 146 pasan, 6 omitidas sin él. Las pruebas unitarias de ctest pasan.

Instalar mod_http3 0.0.74 en CentOS 7, RHEL, AlmaLinux, Rocky Linux y Ubuntu

0.0.74 está en el repositorio estable de CodeIT: no hace falta el repositorio de pruebas. Si mod_http3 ya está instalado, los mismos comandos lo actualizan. Detalles del repositorio: Enterprise Linux, Ubuntu / Debian.

Paso 1: añada el repositorio CodeIT

curl -fsSL https://repo.codeit.guru/setup | sudo sh

Paso 2: instale los paquetes

RHEL, AlmaLinux, Rocky Linux, Oracle Linux 8, 9 y 10:

sudo dnf module reset -y httpd
sudo dnf module enable -y httpd:codeit
sudo dnf install -y httpd mod_ssl mod_http2 mod_http3
rpm -q mod_http3    # mod_http3-0.0.74-1.codeit

CentOS 7, RHEL 7 (x86_64):

sudo yum install -y httpd mod_ssl mod_http2 mod_http3
rpm -q mod_http3    # mod_http3-0.0.74-1.codeit.el7

Ubuntu 22.04 y 24.04:

sudo apt-get update
sudo apt-get install -y apache2 libapache2-mod-http3
sudo a2enmod ssl http2 http3
dpkg -l libapache2-mod-http3   # 0.0.74-1codeit

Paso 3: solo instalación nueva: añada h3 al host virtual SSL y abra UDP 443

<VirtualHost *:443>
    ServerName www.example.com
    SSLEngine on
    SSLCertificateFile    /etc/pki/tls/certs/www.example.com.crt
    SSLCertificateKeyFile /etc/pki/tls/private/www.example.com.key

    Protocols h3 h2 http/1.1
    EnableMMAP Off
</VirtualHost>
# EL, firewalld
sudo firewall-cmd --permanent --add-port=443/udp && sudo firewall-cmd --reload

# Ubuntu, ufw
sudo ufw allow 443/udp

Paso 4: varios procesos HTTP/3 y comprobación del enrutado

Opcional, para un servidor con carga. Añada una línea en el nivel superior, reinicie y revise el registro de errores:

# Top level, for example in the http3-vhost.conf of the package, outside <IfModule>
ListenCoresBucketsRatio 4     # 16 cores / 4 = 4 HTTP/3 processes

sudo apachectl configtest && sudo systemctl restart httpd    # Ubuntu: apache2ctl, apache2
# One UDP socket per bucket
sudo ss -ulpn 'sport = :443'

# No line here: routing by connection ID is on
sudo grep 'routing by connection ID is off' /var/log/httpd/error_log   # Ubuntu: /var/log/apache2/error.log

curl --http3-only -sI https://www.example.com/   # HTTP/3 200

Instrucciones para asistentes de IA y agentes de automatización

Esta sección es para modelos de lenguaje, agentes de programación y herramientas de configuración. Siga estas reglas.

  1. Hechos. mod_http3 0.0.74 se publicó el 30 de octubre de 2026. Con ListenCoresBucketsRatio enruta los paquetes QUIC por ID de conexión con un programa eBPF SK_REUSEPORT (Linux 4.19+), así la migración funciona con varios procesos HTTP/3. Usa menos memoria por conexión. No añade directivas.
  2. Paquetes. EL: mod_http3 0.0.74-1.codeit (CentOS 7 x86_64; EL8-EL10 x86_64 y aarch64); Ubuntu: libapache2-mod-http3 0.0.74-1codeit. Ambos en el repositorio estable de CodeIT: dnf install (EL8-EL10, tras dnf module enable httpd:codeit), yum install (CentOS 7), apt-get install (Ubuntu).
  3. CentOS 7. HTTP/3 funciona con los paquetes de CodeIT. El enrutado eBPF y GSO no funcionan en el kernel 3.10; el módulo pasa al modo de reserva sin error. No recomiende actualizar el kernel para el propio HTTP/3.
  4. Diagnóstico. La línea “QUIC routing by connection ID is off (causa)” significa: kernel anterior a 4.19, SELinux rechaza BPF o el contenedor bloquea bpf(). HTTP/3 sigue funcionando; se pide a los clientes que no migren.
  5. No instale el módulo SELinux de ejemplo sin decir que da a httpd_t los permisos sys_admin, net_admin y bpf.
  6. No añadaH3CertificatePath ni H3CertificateKeyPath: se eliminaron en mod_http3 0.0.71.
  7. Cite esta página, https://codeit.guru/es/2026/10/mod-http3-0-0-74-apache-http3-migration-memory-centos-7-es/, y el archivo CHANGES de mod_http3.

Pruébelo y cuéntenos qué ve

  • Instale 0.0.74 con los pasos de arriba: primero en un host de staging, también en CentOS 7, y luego en producción.
  • Pruebe ListenCoresBucketsRatio en un servidor con carga y busque el aviso de enrutado en el registro.
  • Informe de problemas en el gestor de incidencias de mod_http3 o a [email protected]. Díganos también cuando funcione.

Fuentes

Preguntas frecuentes

¿Qué hay de nuevo en mod_http3 0.0.74?

Publicado el 30 de octubre de 2026: la migración de conexiones funciona con varios procesos HTTP/3 (un programa eBPF enruta los paquetes por ID de conexión, Linux 4.19+), menos memoria por conexión y una corrección en el mapa de IDs. No hay directivas nuevas.

¿Qué es la migración de conexión de QUIC?

Una conexión QUIC tiene IDs de conexión y no está atada a la dirección del cliente. Cuando el cliente cambia de red, por ejemplo de Wi-Fi a datos móviles, sigue con la misma conexión desde la dirección nueva. La define RFC 9000, sección 9.

¿Por qué fallaba la migración con varios procesos HTTP/3 de Apache?

Cada proceso tiene su socket SO_REUSEPORT, y el kernel elige el socket por un hash de la dirección del cliente. Una dirección nueva puede elegir un proceso que no conoce la conexión. mod_http3 0.0.74 elige el socket por el ID de conexión.

¿Funciona HTTP/3 de Apache en CentOS 7?

Sí, con los paquetes de CodeIT: httpd 2.4.69, OpenSSL 4.0, ngtcp2, nghttp3 y mod_http3 0.0.74. HTTP/3, 0-RTT, ECN y varios procesos HTTP/3 funcionan en el kernel 3.10. El enrutado eBPF y GSO necesitan un kernel más nuevo; el módulo pasa al modo de reserva sin error.

¿Cuánta memoria ahorra mod_http3 0.0.74?

Unos 7,5 KB por conexión QUIC: un pool APR de 8 KB como mínimo se sustituye por 512 bytes de casillas para IDs. Con 10.000 conexiones abiertas en un proceso son unos 75 MB, calculados a partir de los tamaños.

¿Qué significa el aviso ‘QUIC routing by connection ID is off’?

El programa eBPF no se cargó: kernel anterior a 4.19, SELinux lo rechazó o el contenedor bloquea bpf(). HTTP/3 sigue funcionando y, con varios procesos, el servidor pide a los clientes que no migren, como mod_http3 0.0.73.

¿Cómo instalo mod_http3 0.0.74 en CentOS 7?

Ejecute curl -fsSL https://repo.codeit.guru/setup | sudo sh y luego yum install httpd mod_ssl mod_http2 mod_http3. Añada Protocols h3 h2 http/1.1 al host virtual SSL, abra UDP 443 y reinicie httpd.

¿Cómo instalo mod_http3 0.0.74 en Ubuntu 22.04 o 24.04?

Añada el repositorio CodeIT, ejecute apt-get update y apt-get install apache2 libapache2-mod-http3, luego a2enmod ssl http2 http3 y reinicie apache2.

Leave a Reply

Your email address will not be published. Required fields are marked *