Initial vault setup
This commit is contained in:
@@ -0,0 +1,187 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user