Hébergement de services personnels derrière un reverse proxy Nginx / Traefik
Quand on commence à héberger ses propres services (blog, monitoring, analytics, LLM) on se retrouve vite avec une dizaine d’applications à exposer sur le web. Les faire toutes écouter sur des ports différents, c’est ingérable. La solution : un reverse proxy.
J’ai testé Nginx et Traefik pour centraliser l’accès à mes services. Voici mon retour d’expérience et la configuration que j’utilise.
Pourquoi un reverse proxy ?
Le principe est simple : un seul point d’entrée (ports 80 et 443) qui distribue les requêtes vers les bons services en fonction du nom de domaine ou du chemin.
Avantages : un seul certificat SSL, une seule configuration réseau, et on peut ajouter l’authentification, le rate limiting, le caching au même endroit.
Option 1 : Nginx
Nginx est un classique solide. Simple, performant, documenté.
Installation
# docker-compose.yml |
Configuration
Un exemple complet avec plusieurs services, SSL et authentification :
events {} |
Gestion des WebSockets
Certains services (Open WebUI, Beszel) utilisent des WebSockets. Il faut ajouter les headers spécifiques :
location /ws/ { |
Nginx est parfait pour un petit nombre de services statiques. Mais quand j’ai commencé à en ajouter un par semaine, la maintenance du fichier de configuration est devenue fastidieuse.
Option 2 : Traefik
Traefik est un reverse proxy moderne conçu pour les conteneurs. Il détecte automatiquement les nouveaux services et génère la configuration tout seul.
Installation
traefik: |
Configuration
# traefik.yml |
Labels Docker
Le gros avantage de Traefik, c’est qu’on configure chaque service avec des labels Docker. Plus besoin de toucher au fichier de config principal :
umami: |
Pour ajouter un nouveau service, je créé juste un bloc de labels :
beszel: |
Traefik gère Lets Encrypt automatiquement : plus de renouvellement manuel des certificats, plus de fichier de config à éditer.
Middlewares
Traefik permet d’ajouter des comportements (authentification, rate limiting, headers) via des middlewares :
# middleware pour l'authentification Basic |
Comparatif Nginx vs Traefik
| Critère | Nginx | Traefik |
|---|---|---|
| Prise en main | Immédiate | Courbe d’apprentissage |
| Configuration | Fichiers manuels | Labels automatiques |
| Certificats SSL | Manuel (certbot) | Automatique (Lets Encrypt) |
| Détection services | Manuelle | Auto (Docker, K8s, etc.) |
| Dashboard | Non | Oui (interface web) |
| Performances | Excellent | Très bon |
| Idéal pour | 1-5 services, config stable | 5+ services, évolution rapide |
Mon choix : Traefik
J’ai commencé avec Nginx et j’étais satisfait. Mais en passant de 3 à 12 services, la gestion des certificats et l’édition manuelle des server blocks sont devenues une charge. J’ai migré vers Traefik et je ne regrette pas.
La configuration déclarative via les labels Docker est un vrai gain de productivité. Je déploie un nouveau docker-compose.yml avec les labels Traefik, et le service est accessible en HTTPS en 30 secondes.
Conclusion
Que vous choisissiez Nginx ou Traefik, l’important est d’avoir un reverse proxy centralisé. Il simplifie la gestion des certificats, la sécurité et l’accès à vos services.
Pour un homelab qui évolue, je recommande Traefik. Pour un déploiement stable avec peu de services, Nginx est plus que suffisant.
Et vous, quel reverse proxy utilisez-vous pour vos services personnels ?