Pendant longtemps, j’ai fait tourner mes services auto-hébergés derrière Nginx Proxy Manager (NPM). Sa promesse ? Une mise en place simple et rapide : un conteneur Docker, un login, un mot de passe, quelques réglages réseau, et hop, mes services étaient accessibles depuis l’extérieur. Mieux encore, grâce à l’intégration directe de Let’s Encrypt, générer et renouveler des certificats SSL "sécurisés" n’a jamais été aussi facile.
Au quotidien, ça faisait le job : ajouter un nouveau service Docker au réseau du proxy, le rendre accessible depuis l’extérieur, et passer à autre chose. Mais plus mon infra interne évoluait, plus j’ai commencé à buter sur les limites du système :
- Beaucoup de manipulations manuelles : chaque ajout ou modification passait par le clic-clic dans l’interface, sans vraie possibilité d’automatiser.
- API restreinte et mal documentée : j’ai dû plonger dans le code source pour en rescencer et comprendre les endpoints.
- Scalabilité limitée : avec quelques hôtes, ça reste lisible, mais dès que la liste grossit, ça devient vite le chaos.
- Peu adapté au load balancing avancé, surtout dans des environnements Kubernetes.
- Fiabilité perfectible : certaines mises à jour ou ajouts de certificats ont déjà fait tomber le reverse proxy sans raison apparente.
Etant adepte du culte de l’automatisation et prêchant la bonne pipeline, je voyais mal comment intégrer NPM dans mes projets où les containers se multipliaient à la pelle. Chaque clic manuel était une entorse à mes principes. Il me fallait donc un nouvel outil, un artefact de routage plus en phase avec mes besoins, capable de s’intégrer dans un workflow entièrement automatisé.
C’est là que j’ai découvert Traefik. Écrit en Go, conçu pour s’intégrer directement aux écosystèmes modernes (Docker, Kubernetes, etc.), et pilotable via des fichiers de configuration ou des labels, il cochait toutes les cases. Fini les interfaces à cliquer, bienvenue dans un reverse proxy pensé pour l’automatisation, le scaling et l’infrastructure-as-code.
Je ne parlerais ici pas de la mise en place des deux services, des pages de docs existent déjà dans ce but pour Traefik et NPM. De plus je ne prétend pas offrir une comparaison approfondie mais uniquement de surface et issue des expériences d'utilisation. Je ne ferais pas non plus de benchmark.
Comparaison
1. Gestion & interface utilisateur
-
Nginx Proxy Manager (NPM) donne un GUI super simple pour créer des hôtes, activer Let's Encrypt ou gérer les certificats. Tout est manuel, mais immédiat. Parfait quand on veux juste ajouter un domaine en deux trois clics.
-
Traefik, lui, offre un tableau de bord pour visualiser la config active, mais pas pour la modifier. Tout passe par des labels Docker, des fichiers YAML ou un provider API.
« After spending two days trying to configure Traefik, I realized that Nginx Proxy Manager is the better choice for me, thanks to its user‑friendly web UI. » Reddit
Comme ressenti : NPM est simple, Traefik demande de coder un peu. -
NPM dispose de multi-utilisateurs, rôles, journalisation des actions. Traefik, par défaut, aucun support de compte utilisateurs ou d’audit log dans la web UI.
2. Automatisation & découverte dynamique
- NPM, tout est manuel. Aucune découverte automatique, on ajoute chaque service à la main.
- Traefik, en revanche, détecte automatiquement les containers (via labels Docker ou Kubernetes) et crée les routes sans intervention manuelle. Un vrai bonheur dès que l'on clone/start de nouveaux services.
3. Stabilité & résilience
- Avec NPM (basé sur OpenResty / Nginx), une erreur de config sur un seul proxy peut faire planter tout le reverse proxy, rendant la web UI inaccessible et stoppant l'accès aux services derrière le reverse proxy.
- Traefik, lui, tolère les erreurs localisées. Une mauvaise config n’affecte qu’un hôte : le reste continue de tourner, la dashboard reste fonctionnelle LRVT's Security Blog.
4. Scalabilité & load balancing
- NPM ne supporte pas le load balancing natif. Tu peux proxyfier un port unique, mais pas répartir la charge.
- Traefik gère nativement le load balancing (Weighed round-robin, Power of two choices), idéal pour des clusters ou des services répliqués, y compris via Kubernetes ou Docker Swarm.
5. Performance & consommation
-
NPM, basé sur Nginx, est ultra léger et performant, spécialement pour un environnement est stable et peu dynamique.
-
Traefik introduit un surcoût en ressources lié à sa nature dynamique. Le rapport avantage/performance penche en faveur de Traefik dès que les services se multiplient Pyproxy.
Des benchmarks faits dans un article montrent que Traefik est un peu moins rapide que NPM mais ce n’est pas dramatique pour un usage homelab par exemple : « the differences may be considered small and neglectable for a reverse proxy solely used in homelabs » LRVT's Security Blog.
6. Sécurité & middlewares
- NPM propose une authentification HTTP de base via interface simple.
- Traefik permet des middlewares avancées : basic auth, rate limiting, redirections, intégration fail2ban ou Crowdsec, plugins supplémentaires, gestion OAuth, IP whitelisting… Tout est possible via une config déclarative
7. Observabilité & métriques
- NPM ne fournit que des outils de supervision limités.
- Traefik inclut des métriques natives compatibles avec Prometheus et Grafana, des journaux d'accès détaillés et des fonctions de tracing, facilitant la supervision et le diagnostic.
En résumé :
Critère | Nginx Proxy Manager | Traefik |
---|---|---|
Interface web | Oui, basé GUI | Dashboard seulement, config via labels/YAML |
Découverte automatisée | ❌ | ✅ via Docker |
Résilience config | Une erreur bride tout | Erreur locale isolée |
Load balancing natif | ❌ | ✅ wrr, p2c |
Performances | Très rapide, Peu de ressources | Un peu plus lourd mais scalable aisément |
Sécurité & middlewares | basic auth | support de plugins et middlewares complexes |
Observabilité | Très limité (coupable grafana/prometheus) | Métriques + Logs + Tracing (coupable grafana/prometheus) |
Adapté Kubernetes/Docker | Passable | natif, automatisation complète |
Pourquoi Traefik s'impose
Traefik s'intègre naturellement dans des workflows orientés infrastructure-as-code : chaque nouveau conteneur correctement étiqueté devient automatiquement accessible, avec certificats Let's Encrypt gérés à la volée. Sa résilience aux erreurs, ses capacités de load balancing et ses outils d'observabilité en font un choix idéal pour des environnements dynamiques.
Bien que la prise en main initiale exige un apprentissage des labels et de la configuration déclarative, le gain en automatisation et en robustesse justifie largement cet investissement, en particulier pour des infrastructures en constante évolution.
En conclusion
- Nginx Proxy Manager : rapide à démarrer, simple, GUI friendly, parfait pour quelques services.
- Traefik : bien plus orienté automatisable et évolutif.
Dans mon cas, avec des projets Docker perpétuels et une volonté de CI/CD, Traefik est clairement le bon choix.