7.1 KiB
title: nginx-proxy created: 2026-06-06 updated: 2026-06-06 type: app tags: [catalogue, reverse-proxy, docker, nginx, auto-hebergement, automation] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Reverse+Proxy, https://github.com/nginx-proxy/nginx-proxy]
🐳 nginx-proxy
Reverse proxy Nginx automatisé pour Docker : démarre un conteneur Nginx qui détecte les autres conteneurs et génère la configuration automatiquement via la variable d'environnement
VIRTUAL_HOST. L'ancêtre du reverse-proxy-as-a-container.
📋 Informations Générales
| Champ | Valeur |
|---|---|
| Site web | github.com/nginx-proxy |
| GitHub | nginx-proxy/nginx-proxy |
| License | MIT |
| Langage | Shell, Python (docker-gen) |
| Étoiles GitHub | 19.9k ⭐ |
| Dernière MAJ | 2026-05-27 |
| Catégorie | [[cat-reverse-proxy |
📝 Description
nginx-proxy est le pionnier du reverse proxy "Docker-native" : un conteneur unique qui wrap Nginx + docker-gen (générateur de configs basé sur les métadonnées Docker). Quand un conteneur démarre avec VIRTUAL_HOST=app.example.com, nginx-proxy détecte l'événement, génère la conf Nginx, et reload — zéro configuration manuelle.
Caractéristiques :
- ✅ Configuration par variables d'environnement (
VIRTUAL_HOST,LETSENCRYPT_HOST,VIRTUAL_PORT, etc.) - ✅ Auto-reload : la conf se regénère à chaque démarrage/arrêt de conteneur
- ✅ HTTPS automatique via le compagnon acme-companion (Let's Encrypt)
- ✅ WebSocket supporté nativement
- ✅ Multi-domaines : un seul nginx-proxy peut gérer des centaines de sites
- ✅ Single binary côté final : juste Nginx sous le capot
- ✅ Léger : image basée sur
nginx:mainline(~50 Mo) - ✅ MIT : open source, maintenu par la communauté (et désormais par ZeroSSL)
Positionnement : c'est l'ancêtre des reverse proxies Docker. Avant lui, il fallait écrire des vhosts Nginx à la main. Avec lui, vous ne touchez plus jamais à un fichier de conf. L'ancêtre conceptuel de Traefik (qui a ensuite ajouté l'auto-discovery des labels, plus flexible).
Limites : c'est plus rigide que Traefik (variables d'env seulement, pas de labels) et moins moderne (pas d'API, pas de dashboard). Pour des stacks simples, il reste imbattable en simplicité. Pour des stacks complexes, Traefik a pris le dessus.
Public cible : utilisateurs qui veulent un reverse proxy basique, solide, sans fioritures, sur une stack Docker de taille petite à moyenne.
🚀 Installation
Option 1 : Docker run (le plus simple)
docker run --detach \
--name nginx-proxy \
--publish 80:80 \
--publish 443:443 \
--volume /var/run/docker.sock:/tmp/docker.sock:ro \
nginxproxy/nginx-proxy:1.11
C'est tout. nginx-proxy tourne, écoute Docker.
Option 2 : Docker Compose (recommandé)
# docker-compose.yml
version: '3.8'
services:
nginx-proxy:
image: nginxproxy/nginx-proxy:1.11
container_name: nginx-proxy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- html:/usr/share/nginx/html
- certs:/etc/nginx/certs
networks:
- proxy
networks:
proxy:
name: proxy
volumes:
html:
certs:
Exemple : ajouter un service à proxyfier
# docker-compose.yml (à part ou dans le même stack)
services:
whoami:
image: traefik/whoami
networks:
- proxy
environment:
- VIRTUAL_HOST=whoami.example.com
# Optionnel : HTTPS auto avec acme-companion
- LETSENCRYPT_HOST=whoami.example.com
- LETSENCRYPT_EMAIL=admin@example.com
networks:
proxy:
external: true # Réseau partagé avec nginx-proxy
Logique : dès que whoami démarre, nginx-proxy détecte le label, génère le vhost, et route whoami.example.com vers le conteneur.
Variante avec HTTPS automatique (acme-companion)
# Ajouter à côté de nginx-proxy
services:
acme-companion:
image: nginxproxy/acme-companion:2.4
container_name: nginx-proxy-acme
restart: unless-stopped
volumes_from:
- nginx-proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- acme:/etc/acme.sh
environment:
- DEFAULT_EMAIL=admin@example.com
- NGINX_PROXY_CONTAINER=nginx-proxy
volumes:
acme:
⚙️ Configuration Initiale
- Créer un réseau Docker partagé :
docker network create proxy - Lancer nginx-proxy (ci-dessus)
- Pour chaque app à exposer :
- Définir
VIRTUAL_HOST=monapp.example.com - Placer le conteneur sur le réseau
proxy - Exposer le port (
EXPOSE 8080dans le Dockerfile ou--expose)
- Définir
- Pointer le DNS : A record
monapp.example.com→ IP du serveur - (Optionnel HTTPS) Lancer
acme-companionpour les certificats
⚠️ Piège courant : les conteneurs proxyfiés doivent partager un réseau Docker avec nginx-proxy. Sur le réseau bridge par défaut, ça marche "par chance" mais en user-defined network, il faut faire
networks: [proxy: { external: true }].
🔄 Alternatives
Open Source
- app-traefik — Plus moderne, auto-discovery par labels (pas env)
- app-caddy — HTTPS automatique natif sans compagnon
- app-nginx-proxy-manager — Nginx + GUI web, plus user-friendly
- app-haproxy — Load balancer pur, pas auto-discovery
- jwilder/nginx-proxy — version originale (maintenant dépréciée, le projet est chez
nginx-proxy/nginx-proxy)
Propriétaires
- AWS ALB (Application Load Balancer)
- Cloudflare Load Balancer
- F5 BIG-IP (enterprise)
- HAProxy Enterprise
🔐 Sécurité
- HTTPS via Let's Encrypt (acme-companion) — fortement recommandé
- Pas d'IP whitelisting natif : à faire via une conf Nginx custom
- Pas de rate limiting natif : idem, conf custom
- HSTS / headers sécurité : à configurer dans la conf Nginx
- Docker socket en lecture seule : limit l'escalade de privilèges
- Image régulièrement mise à jour : suivre les releases
💡 Astuce : pour ajouter des middlewares (auth, rate-limit, headers), il faut créer un fichier de conf custom et le monter dans
/etc/nginx/conf.d/. nginx-proxy n'a pas d'équivalent des middlewares Traefik.
📚 Ressources
Pages Liées
- cat-reverse-proxy — Catégorie Reverse Proxy
- app-traefik — Successeur moderne
- app-nginx-proxy-manager — Variante avec GUI
- comparatif-reverse-proxy — Comparaison détaillée
- recettes-docker-compose — Templates d'intégration