--- 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](https://github.com/nginx-proxy/nginx-proxy) | | **GitHub** | [nginx-proxy/nginx-proxy](https://github.com/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|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](https://github.com/nginx-proxy/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) ```bash 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Ă©) ```yaml # 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 ```yaml # 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) ```yaml # 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 1. **CrĂ©er un rĂ©seau Docker partagĂ©** : `docker network create proxy` 2. **Lancer nginx-proxy** (ci-dessus) 3. **Pour chaque app Ă  exposer** : - DĂ©finir `VIRTUAL_HOST=monapp.example.com` - Placer le conteneur sur le rĂ©seau `proxy` - **Exposer le port** (`EXPOSE 8080` dans le Dockerfile ou `--expose`) 4. **Pointer le DNS** : A record `monapp.example.com` → IP du serveur 5. **(Optionnel HTTPS)** Lancer `acme-companion` pour 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](https://github.com/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 - [Documentation officielle](https://github.com/nginx-proxy/nginx-proxy/tree/main/docs) - [Docker Hub](https://hub.docker.com/r/nginxproxy/nginx-proxy) - [acme-companion (HTTPS)](https://github.com/nginx-proxy/acme-companion) - [Docker-gen](https://github.com/nginx-proxy/docker-gen) ## 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