¿Por qué HTTP/2?
Por dos razones principales:
- Seguridad: Con HTTP/2 los encabezados dejan de viajar en texto plano y van en lenguaje de máquina, lo cual dificulta aún más su intercepción e inspección por parte de terceros.
- Utilidad: Con HTTP/2, si el navegante de nuestra página web lo permite, podremos enviarle notificaciones de nuestra parte (push) lo cual abre la posibilidad de nuevas comodidades en nuestras tareas de programación.
Entorno
El sitio de pruebas tiene:
- Ubuntu 24.04.5 LTS.
- PHP 8.3.6 .
- Apache/2.4.58 .
- Certificados para HTTPS generosamente donados por Let’s Encrypt (yo les dono cuando puedo, si les gusta este artículo hagan donación allá). HTTP/2 solamente funciona con protocolo cifrado.
Consideraciones previas
Para poder ejecutar HTTP/2 se necesita «liberar» las viejas ataduras de PHP 8.3, el elemento clave que ahora no funciona es mpm_prefork y se necesita ahora de mpm_event .
sudo apt-get install php8.3-fpm sudo a2enmod proxy_fcgi sudo a2enconf php8.3-fpm sudo a2dismod mpm_prefork
Esta última línea es la que rompe con el pasado y puede ser que emita un mensaje de advertencia, hay que seguir las instrucciones que emita. Para esta singladura el mensaje de marras fue de que todavía estaba PHP 7.4 y con sudo a2dismod php7.4 quedó libre para volver a ejecutar sudo a2dismod mpm_prefork .
sudo a2dismod php8.3 sudo a2enmod mpm_event sudo systemctl restart apache2
Hasta acá llega la configuración previa, probar desde otra máquina con curl -I https://dominio.com.ve o directamente navegar con Mozilla Firefox a la máquina.
Instalando HTTP/2
Ahora sí a lo que venimos:
sudo a2enmod http2
Y ahora escoger a cuál sitio web le vamos a instalar el nuevo protocolo. Para ver la lista de sitios:
ls -lha /etc/apache2/sites-enabled
Como dijimos que solamente funciona con HTTPS para este trabajo agregamos en el fichero (cada caso es diferente, mirar bien):
sudo nano /etc/apache2/sites-enabled/000-default-le-ssl.conf
La siguiente instrucción:
<IfModule mod_ssl.c> <VirtualHost *:443> Protocols h2 http/1.1
Obviamente NO es el fichero completo, solamente indicamos la sección donde debe ir. Nótese que siempre dejamos HTTP/1.1 más por nostalgia que por otra cosa, ya estamos en el año 2026 y los navegadores web están avezados con dicha tecnología.
Por último reiniciamos Apache2:
sudo systemctl restart apache2
De nuevo, verificar con CURL y navegar directamente al dominio habilitado con HTTP/2.
