Guide Traefik Docker 2026 : Le Reverse Proxy Ultime
TUTORIAL 11 min read fordnox

Guide Traefik Docker 2026 : Le Reverse Proxy Ultime

Configurez Traefik avec Docker pour le SSL automatique, la découverte de services et la répartition de charge. Guide complet pour les déploiements modernes en conteneurs.


Guide Traefik Docker : Reverse Proxy Automatique

Traefik est le reverse proxy cloud-native. Il découvre vos conteneurs Docker et route automatiquement le trafic vers eux — avec des certificats SSL gratuits.

Qu’est-ce que Traefik ?

Traefik se place devant vos services :

Internet → Traefik → Container A (app.domain.com)
                  → Container B (api.domain.com)
                  → Container C (admin.domain.com)

Fonctionnalités clés :

Pourquoi Traefik plutôt que Nginx ?

FonctionnalitéTraefikNginx
Intégration DockerNativeConfiguration manuelle
SSL automatiqueIntégréCertbot nécessaire
Découverte de servicesAutomatiqueManuelle
Rechargement configÀ chaudNécessite un redémarrage
Courbe d’apprentissageModéréePlus faible
PerformancesExcellentesExcellentes

Traefik l’emporte pour les environnements Docker. Nginx pour les configurations statiques (voir notre guide du reverse proxy Nginx).

Prérequis VPS

Traefik est léger :

Les spécifications de votre VPS dépendent de vos services, pas de Traefik. Consultez notre guide meilleur VPS pour Docker pour les recommandations de dimensionnement.

Configuration de base

Étape 1 : Créer le réseau

docker network create traefik-public

Étape 2 : Créer le répertoire de configuration Traefik

mkdir -p /opt/traefik
cd /opt/traefik

Étape 3 : Créer le Docker Compose

# docker-compose.yml
version: '3.8'

services:
  traefik:
    image: traefik:v3.0
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./traefik.yml:/traefik.yml:ro
      - ./acme.json:/acme.json
      - ./config:/config:ro
    networks:
      - traefik-public
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.rule=Host(`traefik.yourdomain.com`)"
      - "traefik.http.routers.traefik.entrypoints=websecure"
      - "traefik.http.routers.traefik.tls.certresolver=letsencrypt"
      - "traefik.http.routers.traefik.service=api@internal"
      - "traefik.http.routers.traefik.middlewares=auth"
      - "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$xxxxx"

networks:
  traefik-public:
    external: true

Étape 4 : Créer la configuration Traefik

# traefik.yml
api:
  dashboard: true
  insecure: false

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

  websecure:
    address: ":443"

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
    network: traefik-public
  file:
    directory: /config
    watch: true

certificatesResolvers:
  letsencrypt:
    acme:
      email: you@yourdomain.com
      storage: /acme.json
      httpChallenge:
        entryPoint: web

Étape 5 : Créer le stockage des certificats

touch acme.json
chmod 600 acme.json
mkdir config

Étape 6 : Générer le mot de passe du tableau de bord

htpasswd -nb admin your-secure-password
# Output: admin:$apr1$...
# Use this in docker-compose.yml, doubling the $ signs

Étape 7 : Lancer Traefik

docker compose up -d

Accédez au tableau de bord : https://traefik.yourdomain.com

Ajouter des services

Exemple : Nginx

# In a separate docker-compose.yml
version: '3.8'

services:
  nginx:
    image: nginx:alpine
    container_name: nginx
    restart: unless-stopped
    networks:
      - traefik-public
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nginx.rule=Host(`www.yourdomain.com`)"
      - "traefik.http.routers.nginx.entrypoints=websecure"
      - "traefik.http.routers.nginx.tls.certresolver=letsencrypt"

networks:
  traefik-public:
    external: true

C’est tout ! Traefik découvre le conteneur et :

Exemple : Application Node.js

services:
  api:
    build: .
    container_name: api
    networks:
      - traefik-public
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.api.rule=Host(`api.yourdomain.com`)"
      - "traefik.http.routers.api.entrypoints=websecure"
      - "traefik.http.routers.api.tls.certresolver=letsencrypt"
      - "traefik.http.services.api.loadbalancer.server.port=3000"

networks:
  traefik-public:
    external: true

Note : loadbalancer.server.port spécifie le port du conteneur.

Middleware

Authentification basique

labels:
  - "traefik.http.middlewares.auth.basicauth.users=user:$$hashed$$password"
  - "traefik.http.routers.admin.middlewares=auth"

Limitation de débit

labels:
  - "traefik.http.middlewares.ratelimit.ratelimit.average=100"
  - "traefik.http.middlewares.ratelimit.ratelimit.burst=50"
  - "traefik.http.routers.api.middlewares=ratelimit"

Liste blanche IP

labels:
  - "traefik.http.middlewares.ipwhitelist.ipwhitelist.sourcerange=192.168.1.0/24,10.0.0.0/8"
  - "traefik.http.routers.admin.middlewares=ipwhitelist"

En-têtes

labels:
  - "traefik.http.middlewares.security.headers.stsSeconds=31536000"
  - "traefik.http.middlewares.security.headers.stsIncludeSubdomains=true"
  - "traefik.http.middlewares.security.headers.contentTypeNosniff=true"
  - "traefik.http.middlewares.security.headers.frameDeny=true"

Redirection

labels:
  - "traefik.http.middlewares.redirect.redirectregex.regex=^https://old.domain.com/(.*)"
  - "traefik.http.middlewares.redirect.redirectregex.replacement=https://new.domain.com/$${1}"

Compression

labels:
  - "traefik.http.middlewares.compress.compress=true"
  - "traefik.http.routers.web.middlewares=compress"

Domaines multiples

Même conteneur

labels:
  - "traefik.http.routers.web.rule=Host(`domain1.com`) || Host(`domain2.com`)"

Avec redirection

labels:
  - "traefik.http.routers.www.rule=Host(`www.domain.com`)"
  - "traefik.http.routers.www.middlewares=redirect-to-apex"
  - "traefik.http.middlewares.redirect-to-apex.redirectregex.regex=^https://www\\.(.+)"
  - "traefik.http.middlewares.redirect-to-apex.redirectregex.replacement=https://$${1}"

Répartition de charge

Conteneurs multiples

services:
  api:
    image: myapi
    deploy:
      replicas: 3
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.api.rule=Host(`api.domain.com`)"

Traefik répartit automatiquement la charge entre les réplicas.

Sessions persistantes

labels:
  - "traefik.http.services.api.loadbalancer.sticky.cookie=true"
  - "traefik.http.services.api.loadbalancer.sticky.cookie.name=server_id"

Vérifications de santé

labels:
  - "traefik.http.services.api.loadbalancer.healthcheck.path=/health"
  - "traefik.http.services.api.loadbalancer.healthcheck.interval=10s"

Routage basé sur le chemin

labels:
  - "traefik.http.routers.api.rule=Host(`domain.com`) && PathPrefix(`/api`)"
  - "traefik.http.routers.web.rule=Host(`domain.com`) && PathPrefix(`/`)"

Supprimer le préfixe de chemin

labels:
  - "traefik.http.middlewares.strip-api.stripprefix.prefixes=/api"
  - "traefik.http.routers.api.middlewares=strip-api"

/api/users devient /users pour le backend.

Certificats wildcard

Pour *.domain.com :

# traefik.yml
certificatesResolvers:
  letsencrypt:
    acme:
      email: you@domain.com
      storage: /acme.json
      dnsChallenge:
        provider: cloudflare
# docker-compose.yml
environment:
  - CF_API_EMAIL=you@domain.com
  - CF_API_KEY=your-api-key

Ensuite utilisez :

labels:
  - "traefik.http.routers.web.tls.certresolver=letsencrypt"
  - "traefik.http.routers.web.tls.domains[0].main=domain.com"
  - "traefik.http.routers.web.tls.domains[0].sans=*.domain.com"

Configuration basée sur fichier

Pour les services non-Docker, utilisez le fournisseur de fichiers :

# /opt/traefik/config/external.yml
http:
  routers:
    external-service:
      rule: "Host(`external.domain.com`)"
      service: external-service
      tls:
        certResolver: letsencrypt

  services:
    external-service:
      loadBalancer:
        servers:
          - url: "http://192.168.1.100:8080"

Traefik surveille le répertoire de configuration et recharge automatiquement.

Métriques et surveillance

Activer les métriques

# traefik.yml
metrics:
  prometheus:
    entryPoint: metrics
    buckets:
      - 0.1
      - 0.3
      - 1.2
      - 5.0

entryPoints:
  metrics:
    address: ":8082"

Tableau de bord Grafana

Utilisez l’ID de tableau de bord 11462 pour les métriques Traefik. Pour une configuration complète de surveillance Grafana, consultez notre guide dédié.

Journaux d’accès

# traefik.yml
accessLog:
  filePath: "/var/log/traefik/access.log"
  format: json
  filters:
    statusCodes:
      - "400-599"
  bufferingSize: 100

Montez le répertoire de journaux :

volumes:
  - ./logs:/var/log/traefik

Dépannage

Conteneur non découvert

  1. Vérifiez le réseau :
docker network inspect traefik-public
  1. Vérifiez les labels :
docker inspect container_name | grep -A 50 Labels
  1. Vérifiez que traefik.enable=true est présent

SSL ne fonctionne pas

  1. Vérifiez le journal ACME :
docker logs traefik 2>&1 | grep -i acme
  1. Vérifiez les permissions de acme.json (600)

  2. Assurez-vous que le port 80 est ouvert pour le challenge HTTP

502 Bad Gateway

  1. Vérifiez que le conteneur est en cours d’exécution
  2. Vérifiez que le port est correct dans les labels
  3. Consultez les journaux du conteneur

Voir la configuration active

Le tableau de bord affiche tous les routeurs, services et middlewares. Ou bien :

curl http://localhost:8080/api/http/routers

Checklist de production

Meilleur VPS pour Traefik

Traefik en lui-même est minuscule. Dimensionnez en fonction de vos services :

FournisseurOffrePrixIdéal pour
HetznerCX215,39 €5-10 services
HostingerKVM14,99 $Configuration économique
VultrVC212 $Portée mondiale

FAQ

Traefik vs Nginx Proxy Manager ?

Traefik pour les configurations natives Docker. NPM pour une configuration plus simple via interface graphique.

Combien de services Traefik peut-il gérer ?

Des centaines facilement. Il est conçu pour les microservices à grande échelle.

Traefik est-il sécurisé ?

Oui. N’exposez pas l’API sans authentification. Maintenez-le à jour.

Puis-je migrer depuis Nginx ?

Oui. Une migration progressive est possible — exécutez les deux temporairement.

Traefik supporte-t-il HTTP/3 ?

Oui, depuis la v3.0. Activez-le dans la configuration des points d’entrée.

Résumé

Traefik automatise ce que vous configureriez manuellement dans Nginx :

TâcheNginxTraefik
Ajouter un serviceModifier la config, rechargerAjouter des labels
Obtenir le SSLExécuter certbotAutomatique
Répartir la chargeConfigurer l’upstreamAutomatique
Supprimer un serviceModifier la config, rechargerArrêter le conteneur

Pour les déploiements Docker, Traefik est le choix moderne. Configurez-le une fois, ajoutez des services avec des labels pour toujours. Pour un workflow de déploiement complet, associez-le avec Docker Compose.

~/traefik-docker-guide/get-started

Ready to get started?

Get the best VPS hosting deal today. Hostinger offers 4GB RAM VPS starting at just $4.99/mo.

Get Hostinger VPS — $4.99/mo

// up to 75% off + free domain included

// related topics

traefik docker configuration traefik reverse proxy docker traefik ssl routage de conteneurs

// related guides

Andrius Putna

Andrius Putna

I am Andrius Putna. Geek. Since early 2000 in love tinkering with web technologies. Now AI. Bridging business and technology to drive meaningful impact. Combining expertise in customer experience, technology, and business strategy to deliver valuable insights. Father, open-source contributor, investor, 2xIronman, MBA graduate.

// last updated: February 8, 2026. Disclosure: This article may contain affiliate links.