# Cómo Habilitar HTTP/3 en Nginx

- Link: https://binariocero.com/linux/como-habilitar-http-3-en-nginx
- Published: 2025-09-23T07:25:55+02:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

HTTP/3 (HTTP sobre QUIC) usa QUIC sobre UDP para mejorar la latencia de establecimiento
de conexión y ofrecer 0-RTT. Nginx incluye soporte experimental para HTTP/3 a partir
de la rama 1.25.x, pero el módulo no se construye por defecto: hay que compilar 
nginx con soporte para HTTP/3 (o instalar un paquete ya compilado que lo incluya)
y usar una biblioteca TLS compatible (OpenSSL 3.5.1+, BoringSSL, o alternativas 
compatibles).

## Requisitos previos

 1. **Versión de nginx**: Nginx ≥ 1.25 (módulo `ngx_http_v3_module`).
 2. **Biblioteca TLS**: OpenSSL moderno, BoringSSL o LibreSSL/QuicTLS.
 3. **Certificados TLS válidos** (Let's Encrypt o comercial).
 4. **Puertos**: abrir UDP/443 además de TCP/443 en el firewall o proveedor de nube.
 5. **Compilación**: si no usas paquetes precompilados, necesitarás compilar nginx.

## Opciones de instalación

 * **Opción A — Instalar un paquete ya compilado**: algunas distribuciones ofrecen
   builds con HTTP/3. Comprueba la versión y que `--with-http_v3_module` esté presente.
 * **Opción B — Compilar nginx desde fuente**:
    1. Descargar nginx ≥ 1.25.
    2. Obtener y compilar una biblioteca TLS compatible.
    3. Configurar con `./configure --with-http_v3_module` y enlazar la librería TLS.
    4. Ejecutar `make && make install`.

## Ejemplo de configuración (nginx.conf — extracto)

En el bloque `server { ... }` de tu configuración HTTPS:

    ```wp-block-code
    server {
        http2 on;
        http3 on;

        listen 443 ssl; 
        listen [::]:443 ssl;

        listen 443 quic reuseport;
        listen [::]:443 quic reuseport;

        server_name ejemplo.com;

        ssl_certificate /etc/ssl/certs/ejemplo.fullchain.pem;
        ssl_certificate_key /etc/ssl/private/ejemplo.privkey.pem;

        ssl_protocols TLSv1.2 TLSv1.3;

        quic_retry on;
        ssl_early_data on;

        add_header Alt-Svc 'h3=":443"; ma=86400' always;
        add_header QUIC 'h3' always;

        location / {
            root /var/www/html;
            index index.html;
        }
    }
    ```

Puntos clave:

 * `listen 443 quic reuseport;` habilita QUIC/HTTP3 en UDP.
 * `Alt-Svc` anuncia a los navegadores que el servidor soporta HTTP/3.
 * TLS debe ser 1.3.

## Recomendaciones de TLS y 0-RTT

 * HTTP/3 requiere TLS 1.3.
 * `ssl_early_data on;` habilita 0-RTT, pero conlleva riesgo de replays. Actívalo
   solo si tu aplicación lo tolera.

## Firewall y red

 * Abre **UDP 443** además de TCP 443.
 * Si usas balanceadores, asegúrate de que enruten tráfico UDP al backend.

## Pruebas y verificación

 1. **Navegador**: en las DevTools, revisa la columna _Protocol_ para ver si usa `h3`.
 2. **curl** (con soporte HTTP/3): `curl --http3 -I https://ejemplo.com`
 3. **Herramientas online**: existen testers HTTP/3 que validan la conexión y protocolo
    negociado.

## Resolución de problemas

 * **No hay conexiones QUIC**: revisa que UDP/443 esté abierto, nginx tenga `--with-
   http_v3_module` y que TLS sea 1.3.
 * **Errores al compilar**: asegúrate de que tu librería TLS es compatible y que
   las rutas a `./configure` son correctas.
 * **Problemas con múltiples dominios/SNI**: revisa la organización de `listen` 
   y `reuseport` para cada bloque `server`.

## Consideraciones operativas

 * HTTP/3 puede mejorar la latencia, pero no siempre garantiza mayor rendimiento.
   Evalúalo en tus cargas reales.
 * Monitoriza métricas de QUIC y TLS para detectar anomalías.
 * Mantén actualizadas las librerías TLS y nginx por seguridad.
