Depuis la version 2.5 de Traefik, vous pouvez désormais mettre en place/utiliser le protocole HTTP/3 (QUIC). Retenez toutefois qu'il s'agit encore d'une version au stade expérimentale pour Traefik, que des instabilités sont à prévoir.


Version Date Commentaires
1 05/2022 Création de l'article
1.1 08/2023 Mise à jour des versions, mise à jour de l'URL de l'outil, ajout du résultat souhaité

Objectif : Permettre à Traefik d'écouter/répondre aux requêtes HTTP/3 (QUIC)

Environnement : Debian 12, Docker 24.x, docker compose (plugin) 2.20.x, Traefik 2.10.

Contexte d'exécution :

jho@vmi866042:/opt/docker/dc$ tree
.
├── conf
│   ├── acme.json
│   ├── traefik.yml
│   ├── traefikdynamic
│   │   ├── dynamic.yml
├── docker-compose.yml
└── logs
    ├── traefikAccess.log
    ├── traefik.log
Résultat de la commande "tree" dans le dossier /opt/docker/dc
  • dossier où se trouvent tous les fichiers et dossiers pour cet exemple : /opt/docker/dc
  • emplacement du fichier de configuration principal de Traefik : /opt/docker/dc/conf/traefik.yml
  • dossier où se trouvent les configurations de Traefik (fichiers dynamiques) : /opt/docker/dc/conf/traefikdynamic
  • emplacement du fichier comportant tous les certificats générés par let's encrypt (ou autre) : /opt/docker/dc/conf/acme.json
  • dossier où se trouvent les journaux d'événements (logs) : /opt/docker/dc/logs/

Principes et prérequis

HTTP/3 est un nouveau protocole standardisé visant à améliorer la vitesse de navigation sur le web. Sans rentrer dans de nombreux détails, HTTP/3 est un protocole de transport pour distribuer des requêtes HTTP plus rapidement qu'avec HTTP/2 (TCP), notamment en utilisant l'UDP.

http3 quic diagram
HTTP/3 QUIC - image récupérée depuis le blog CloudFlare

Pour plus d'informations, je vous suggère ces sites :

Configuration de Traefik

Avant de vous lancer dans la configuration du HTTP/3, sachez qu'il n'est pas possible de faire écouter Traefik sur un port UDP ayant le même numéro de port qu'un port TCP. De plus, l'entrypoint utilisé pour HTTP/3 doit être celui avec lequel vous avez activé la partie TLS pour vos routeurs.

La configuration est assez simple dans l'ensemble : ajoutez le bloc "experimental" et modifier l'entrypoint servant le HTTPS :

experimental:
  http3: true

entryPoints:
  web:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https
  websecure:
    address: ":443"
    http3:
      advertisedPort: "443"

Vous devez redémarrer Traefik pour valider les changements. Avec cette configuration, tous vos routeurs configurés avec l'entrypoint "websecure" (selon l'exemple) seront accessibles en HTTP/2 et HTTP/3.

Configuration du fichier docker-compose.yml

Vous devez faire écouter Traefik sur le port 443/UDP pour qu'il puisse écouter/distribuer en HTTP/3. Ainsi, modifiez le service dans le fichier docker-compose comme tel :

---
services:
  traefik:
    image: traefik:saintmarcelin
    container_name: traefik
    restart: unless-stopped
    ports:
      - target : 80
        published : 80
        protocol: tcp
        mode : host
      ### BEGIN dashboad
      - target : 8080
        published : 8080
        protocol: tcp
        mode : host
      ### END dashboard
      - target : 443
        published : 443
        protocol: tcp
        mode : host
      # HTTP/3 QUIC
      - target : 443
        published : 443
        protocol: udp
        mode : host
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./conf/traefikdynamic:/dynamic
      - ./conf/traefik.yml:/etc/traefik/traefik.yml:ro
      - ./conf/acme.json:/etc/traefik/acme.json
      - ./logs/traefik.log:/etc/traefik/applog.log
    environment:
      TZ: Europe/Paris

Pour tester, vous pouvez utiliser l'outil disponible chez Domsignal :

HTTP/3 Test | Ensure Your Website’s Speed and Compatibility
Find out if your site supports the latest H3 protocol for better performance. Domsignal H3 tool use cURL for the testing

Lorsque votre configuration fonctionne, vous devez avoir ce résultat :

Source

Partager l'article