Si vous déployez des applications web en 2026, vous avez forcément croisé la route d’un reverse proxy. Nginx, Apache, HAProxy : ces vénérables solutions font le job, mais elles partagent un défaut commun — la configuration manuelle. Chaque nouveau service, chaque nouveau sous-domaine nécessite d’éditer un fichier de config et de recharger le serveur. Traefik renverse la table : il découvre automatiquement vos services, génère les certificats SSL, et route le trafic sans que vous ayez à toucher un seul fichier de configuration. Voici comment le maîtriser.

Qu’est-ce que Traefik et pourquoi il change tout

Traefik est un reverse proxy cloud-native écrit en Go, créé en 2016 par Emile Vauge et devenu l’un des projets open-source les plus actifs de l’écosystème cloud (50 000+ étoiles GitHub en 2026). Contrairement aux reverse proxies traditionnels, Traefik :

  • Découvre automatiquement les services via des providers (Docker, Kubernetes, Consul, Redis, fichiers)
  • Génère et renouvelle les certificats Let’s Encrypt sans intervention humaine
  • S’auto-configure : aucun reload nécessaire quand vous ajoutez un service
  • Observe le trafic avec un dashboard temps réel et des métriques Prometheus
  • Applique des middlewares (rate limiting, IP whitelist, redirections, authentification) via de simples labels

Pour un développeur web qui jongle entre WordPress, une API Node.js, un dashboard Python et un serveur de staging, Traefik élimine des heures de configuration Nginx.

Installation avec Docker Compose

Voici le docker-compose.yml minimal pour démarrer Traefik en production :

version: '3.9'

services:
  traefik:
    image: traefik:v3.3
    container_name: traefik
    restart: unless-stopped
    command:
      # Active le dashboard (protégé par mot de passe)
      - "--api.dashboard=true"
      # Providers : Docker et surveillance de fichiers
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.file.directory=/etc/traefik/dynamic"
      # Let's Encrypt
      - "--certificatesresolvers.letsencrypt.acme.email=votre@email.com"
      - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
      # Entrypoints HTTP et HTTPS
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      # Redirection HTTP → HTTPS globale
      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./letsencrypt:/letsencrypt
      - ./dynamic:/etc/traefik/dynamic
    networks:
      - proxy

networks:
  proxy:
    external: true

Créez le réseau externe une seule fois :

docker network create proxy

Déployer un service WordPress avec HTTPS automatique

La magie de Traefik opère via des labels Docker. Voici un WordPress avec MariaDB qui obtient automatiquement son certificat SSL :

services:
  wp:
    image: wordpress:6.5-php8.3
    restart: unless-stopped
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: ${WP_DB_PASSWORD}
    volumes:
      - ./wp-content:/var/www/html/wp-content
    labels:
      - "traefik.enable=true"
      # Routeur HTTP
      - "traefik.http.routers.monsite.rule=Host(`monsite.fr`) || Host(`www.monsite.fr`)"
      - "traefik.http.routers.monsite.entrypoints=websecure"
      - "traefik.http.routers.monsite.tls.certresolver=letsencrypt"
      # Middleware : redirection www → non-www
      - "traefik.http.middlewares.redirect-www.redirectregex.regex=^https://www\.monsite\.fr/(.*)"
      - "traefik.http.middlewares.redirect-www.redirectregex.replacement=https://monsite.fr/$${1}"
      - "traefik.http.middlewares.redirect-www.redirectregex.permanent=true"
    networks:
      - proxy
      - internal

  db:
    image: mariadb:11.4
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: ${WP_DB_PASSWORD}
    volumes:
      - ./db-data:/var/lib/mysql
    networks:
      - internal  # La BDD n'est PAS exposée sur le réseau proxy

networks:
  proxy:
    external: true
  internal:

En 30 secondes, votre site WordPress est en ligne avec HTTPS, renouvellement automatique des certificats, et isolation réseau de la base de données. Aucune configuration Nginx, aucun fichier .conf, aucun reload.

Les middlewares : la boîte à outils intégrée

Traefik embarque plus de 30 middlewares qui s’activent par simples labels. Voici les plus utiles pour un développeur web :

Rate limiting : protégez vos formulaires

# Limite à 30 requêtes par seconde par IP
- "traefik.http.middlewares.rate-limit.ratelimit.average=30"
- "traefik.http.middlewares.rate-limit.ratelimit.burst=10"
- "traefik.http.routers.monsite.middlewares=rate-limit"

IP Whitelist : restreindre l’accès admin

# Seul le bureau peut accéder à /wp-admin
- "traefik.http.middlewares.admin-ip.ipwhitelist.sourcerange=10.0.0.0/8,1.2.3.4"
- "traefik.http.routers.monsite.middlewares=admin-ip"

Basic Auth : protéger un staging

# Générer le mot de passe : htpasswd -nb admin motdepasse
- "traefik.http.middlewares.staging-auth.basicauth.users=admin:$$2y$$05$$..."
- "traefik.http.routers.staging.middlewares=staging-auth"

Compression et en-têtes de sécurité

# Active Gzip/Brotli automatiquement
- "traefik.http.middlewares.compress.compress=true"

# Headers de sécurité OWASP
- "traefik.http.middlewares.sec-headers.headers.framedeny=true"
- "traefik.http.middlewares.sec-headers.headers.sslredirect=true"
- "traefik.http.middlewares.sec-headers.headers.stsSeconds=31536000"
- "traefik.http.middlewares.sec-headers.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.sec-headers.headers.contentTypeNosniff=true"
- "traefik.http.middlewares.sec-headers.headers.browserXssFilter=true"

Dashboard et monitoring

Activez le dashboard Traefik (protégé par authentification) :

labels:
  - "traefik.enable=true"
  - "traefik.http.routers.dashboard.rule=Host(`traefik.monsite.fr`)"
  - "traefik.http.routers.dashboard.service=api@internal"
  - "traefik.http.routers.dashboard.entrypoints=websecure"
  - "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
  - "traefik.http.routers.dashboard.middlewares=auth"
  - "traefik.http.middlewares.auth.basicauth.users=admin:$$2y$$05$$..."

Le dashboard affiche en temps réel : les routeurs actifs, les services, les middlewares, l’état des certificats SSL, et les métriques de trafic. Plus besoin de grep dans les logs Nginx pour comprendre ce qui se passe.

Pour une vue plus poussée, Traefik expose nativement des métriques Prometheus et un exporter OpenTelemetry. Un dashboard Grafana en deux clics :

# docker-compose.yml de Traefik
command:
  - "--metrics.prometheus=true"
  - "--metrics.prometheus.addrouterslabels=true"
  - "--metrics.prometheus.entrypoint=traefik"
  - "--tracing.opentelemetry=true"
  - "--tracing.opentelemetry.grpc.endpoint=jaeger:4317"

Traefik vs Nginx Proxy Manager vs Caddy

Critère Traefik v3 NPM Caddy
Découverte auto Docker ✅ Native ✅ Via UI ❌ Manuel
SSL Let’s Encrypt ✅ Auto ✅ Via UI ✅ Auto
Dashboard ✅ Complet ✅ Simple ❌ Minimal
Middlewares ✅ 30+ ⚠️ Basique ✅ Modules
Kubernetes ✅ Excellente ⚠️ Partielle
Performance (req/s) ~45 000 ~35 000 ~38 000
Configuration Labels / YAML Interface web Caddyfile

Nginx Proxy Manager (NPM) reste le plus simple si vous voulez une interface web point-and-click. Caddy est idéal pour les petits projets standalone. Traefik est imbattable dès que vous gérez plus de trois services ou que vous approchez Kubernetes.

Pièges à éviter

  • Le dashboard en HTTP public : protégez-le toujours par basic auth + IP whitelist.
  • Le fichier acme.json : sauvegardez-le religieusement. Il contient vos clés privées SSL. Sans backup, vous devrez régénérer tous vos certificats (et subir le rate limit de Let’s Encrypt).
  • Les labels qui s’accumulent : utilisez un fichier .env et des variables pour ne pas vous perdre dans 50 lignes de labels par service.
  • La version de l’API Docker : Traefik v3 nécessite Docker 24+. Sur un vieux serveur, montez en version avant d’installer.

Conclusion

Traefik n’est pas juste « un énième reverse proxy ». C’est un changement de paradigme dans la gestion du trafic web : au lieu de configurer manuellement chaque route, vous annotez vos services et Traefik fait le reste. Pour un développeur qui déploie WordPress, des APIs, des dashboards ou des microservices, c’est un gain de temps colossal et une fiabilité accrue — plus de certificats expirés, plus de reload oublié, plus de configuration divergente entre dev et prod.

En 2026, Traefik est le reverse proxy de référence pour les déploiements cloud-native. Si vous êtes encore sous Nginx configuré à la main, ce guide est votre excuse pour sauter le pas.

Sources : Documentation officielle TraefikGitHub TraefikLet’s Encrypt Rate LimitsDocker Compose Documentation

W
WP Admin Lab

Architecte web full-stack. WordPress, performance, data et sécurité. Notes de terrain, tests reproductibles et retours d'expérience.