
🌐 También en: English · Deutsch · Français
La programación de la tele de esta noche era pura basura, así que decidí ponerme en modo friki y trastear con el servidor. ¿Qué mejor forma de pasar la velada que meterse de lleno en una mejora de rendimiento a nivel de protocolo?
Hoy quiero hablarte de algo que mejora el rendimiento «bajo el capó»: en concreto, de cómo se transmiten los datos entre el navegador y el servidor web. Puede que ya hayas oído hablar de HTTP/3, el flamante protocolo de transporte que promete cargas de página más rápidas y fiables. Los benchmarks apuntan a mejoras de alrededor de un 10–15 % en escenarios reales, especialmente notables en dispositivos móviles.
¿Por qué cambiar?
Hasta ahora, mi blog de WordPress funcionaba con el bueno de Apache como servidor web. Fiable, maduro, pero por desgracia todavía rezagado en cuanto a soporte de HTTP/3. Este estándar ya no es algo experimental: está aquí, y los navegadores (Chrome, Firefox, Safari, Edge) ya lo hablan con fluidez. Apache, en cambio, se lo está tomando con calma.
Así que el siguiente paso lógico era migrar a Nginx, que sí ofrece soporte para HTTP/3. Eso implicaba, claro, trasladar mi configuración de Apache a la sintaxis de Nginx, todo un rompecabezas friki en sí mismo.
Los pasos de la migración
- Activar el repositorio oficial de Nginx
Los repositorios por defecto de Debian 12 todavía no incluyen una compilación con soporte para HTTP/3. Para tener QUIC y HTTP/3, tuve que añadir directamente el repositorio del fabricante. - Instalar Nginx
Sencillo, pero crucial. Sin el repositorio del fabricante, acabarías con un paquete desfasado. - Migrar la configuración
Sintaxis.confde Apache ≠ sintaxis de Nginx. Cosas como las reglas de.htaccesshay que traducirlas a mano a bloquesservery directivaslocation. - Cambiar los servicios
Parar Apache, quitarlo del arranque automático y luego habilitar e iniciar Nginx. No quieres que los dos escuchen en el puerto 80/443. - Ajustar el usuario de PHP-FPM
Con Apache, el usuario erawww-data. Con Nginx, el proceso suele ejecutarse comonginx, así que tuve que ajustar los permisos en consecuencia. - Arreglar las cabeceras de seguridad
Una de mis cabeceras HTTP bastionadas chocaba con la nueva configuración. Un pequeño ajuste resolvió los problemas de handshake. - Probar, probar, probar
Porque en la vida de un administrador de sistemas, si no lo has probado desde tres navegadores distintos y desde tu móvil con una wifi dudosa, en realidad no funciona.
El resultado
Ahora mi blog sirve sus páginas tan contento a través de HTTP/3 (QUIC). Las páginas cargan algo más rápido, sobre todo al pasar de un artículo a otro o al recargar con una conexión inestable. Es una de esas mejoras que no notas cuando está, pero cuya ausencia sí que se sufre.
Aquí tienes el log de mi servidor web NGINX con las peticiones de los clientes. Ahora se ve claramente HTTP/3 en acción:
79.246.98.138 - - [22/Aug/2025:19:28:19 +0000] "GET /wp-content/uploads/2025/08/hangman.webp HTTP/3.0" 200 341646 "https://www.apt-upgrade.me/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0" 79.246.98.138 - - [22/Aug/2025:19:28:19 +0000] "GET /wp-content/uploads/2025/08/vpn_broken.png HTTP/3.0" 200 927519 "https://www.apt-upgrade.me/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0" 79.246.98.138 - - [22/Aug/2025:19:28:19 +0000] "GET /page/2/ HTTP/3.0" 200 13150 "https://www.apt-upgrade.me/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0" 79.246.98.138 - - [22/Aug/2025:19:40:23 +0000] "GET /wp-content/uploads/2025/05/cropped-superman-1-1.png HTTP/3.0" 200 9032 "https://www.apt-upgrade.me/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0" 79.246.98.138 - - [22/Aug/2025:19:40:23 +0000] "GET /wp-content/uploads/2025/08/chaos-300x300.webp HTTP/3.0" 200 12818 "https://www.apt-upgrade.me/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0" 79.246.98.138 - - [22/Aug/2025:19:40:23 +0000] "GET /wp-content/uploads/2025/08/rocket-300x300.webp HTTP/3.0" 200 10792 "https://www.apt-upgrade.me/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0" 79.246.98.138 - - [22/Aug/2025:19:40:23 +0000] "GET /wp-content/uploads/2025/08/bootme-300x200.webp HTTP/3.0" 200 15418 "https://www.apt-upgrade.me/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0" 79.246.98.138 - - [22/Aug/2025:19:40:23 +0000] "GET /wp-content/uploads/2025/08/hangman-300x300.webp HTTP/3.0" 200 17030 "https://www.apt-upgrade.me/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0" 79.246.98.138 - - [22/Aug/2025:19:40:23 +0000] "GET /wp-content/uploads/2025/05/rack-205x300.jpg HTTP/3.0" 200 19892 "https://www.apt-upgrade.me/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0" 79.246.98.138 - - [22/Aug/2025:19:40:23 +0000] "GET /wp-content/uploads/2024/09/grapheneos-135x300.png HTTP/3.0" 200 22647 "https://www.apt-upgrade.me/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0" 79.246.98.138 - - [22/Aug/2025:19:40:23 +0000] "GET /wp-content/uploads/2024/11/protectli-300x150.png HTTP/3.0" 200 22307 "https://www.apt-upgrade.me/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0" 79.246.98.138 - - [22/Aug/2025:19:40:24 +0000] "GET /wp-content/cache/wpo-minify/1755704871/assets/wpo-minify-header-9e1552c9.min.css HTTP/3.0" 200 510477 "https://www.apt-upgrade.me/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0)
Reflexiones finales
¿Mereció la pena el lío? Totalmente. Migrar de Apache a Nginx no fue solo cuestión de conseguir HTTP/3: también me dio un control más fino sobre la caché, el proxy inverso y la configuración SSL/TLS. Además, me quitó ese gusanillo friki de madrugada.
Lo siguiente en mi lista: afinar los parámetros de QUIC para establecer conexiones aún más rápido y experimentar con la reanudación 0-RTT. Pero esa es una historia para otra noche en vela.






