Skip to content

Nginx Proxy Manager : reverse proxy en 5 min avec Docker

Brandon Visca
Published date:

💡 TL;DR — Nginx Proxy Manager avec Docker :

  • SSL Let’s Encrypt auto en quelques clics, renouvellement transparent tous les 90 jours
  • Reverse proxy multi-services depuis une interface web, zéro fichier conf à éditer
  • Auth HTTP et restrictions IP intégrées nativement, sans plugin externe

Table des matières

Table des matières

Pourquoi Nginx Proxy Manager ?

Si tu auto-héberges plusieurs services (Nextcloud, Plex, Grafana, vaultwarden…), tu finis vite à gérer des dizaines de ports, des certificats SSL qui expirent et des fichiers de conf Nginx imbitables. 😵‍💫

Nginx Proxy Manager (NPM) résout tout ça via une interface web claire. Tu crées un point d’entrée unique, tu rediriges les domaines vers les bons conteneurs, et les certificats Let’s Encrypt se renouvellent tout seuls. Pas besoin de toucher au terminal à chaque nouveau service.

Prérequis

Installation avec Docker Compose

Crée le dossier et le fichier :

mkdir -p ~/npm && cd ~/npm

💡 Mon dossier racine des projets Docker est ~/npm. Si tu préfères un autre chemin, adapte le volume.

Copie ce docker-compose.yml :

services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    container_name: npm
    restart: unless-stopped
    ports:
      - "80:80"
      - "81:81"
      - "443:443"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    environment:
      - TZ=Europe/Paris
      # Les identifiants par défaut, change-les au premier login
      - INITIAL_ADMIN_EMAIL=admin@example.com
      - INITIAL_ADMIN_PASSWORD=changeme

Lance le conteneur :

docker compose up -d

Premier accès : http://TON_IP:81 (ou http://npm.tondomaine.fr:81 si tu as déjà configuré le DNS).

Identifiants par défaut :

  • Email : admin@example.com
  • Password : changeme

⚠️ Change immédiatement le mot de passe dans Settings → Users.

Configuration du reverse proxy

1. Créer un proxy host

Va dans l’onglet Hosts → Proxy Hosts → Add Proxy Host.

ChampValeur
Domain Namesmonapp.tondomaine.fr
Schemehttp
Forward Hostname / IP172.17.0.1 (IP de la passerelle Docker)
Forward Port8080 (port interne du service)

💡 Si ton service est un autre conteneur Docker sur le même réseau bridge par défaut, utilise 172.17.0.1. Sur un réseau Docker custom, utilise le nom du conteneur (ex: nextcloud) et le port exposé par celui-ci.

2. SSL Let’s Encrypt automatique

Dans la même fenêtre, onglet SSL :

  1. Coche Request a new SSL Certificate
  2. Coche Force SSL (redirection automatique http → https)
  3. Coche HSTS Enabled
  4. Coche I Agree to the Let’s Encrypt Terms of Service
  5. Email Address for Let’s Encrypt : ton email
  6. Clique Save

Le certificat est généré et le renouvellement se fait tout seul tous les 90 jours. Tu n’as plus à y penser.

3. Redirection www ↔ non-www

Onglet Advanced du proxy host, ajoute dans la zone Custom Nginx Configuration :

if ($host = www.tondomaine.fr) {
    return 301 https://tondomaine.fr$request_uri;
}

Ou l’inverse si tu préfères le www. Ça évite le duplicate content SEO.

Authentification basique (Basic Auth)

NPM intègre une auth HTTP native sans plugin externe.

  1. Va dans Access Lists → Add Access List
  2. Nom : internal-access
  3. Satisfy Any : ❌
  4. Authorization: clique Add, rentre un user/password
  5. Sauvegarde

Puis dans ton proxy host → onglet AccessAccess List → sélectionne internal-access.

Tu peux aussi ajouter des restrictions IP (whitelist) dans la même access list.

Bonnes pratiques et astuces

Pour le durcissement HTTPS, complète avec les headers HTTP sécurisés Nginx — HSTS étendu, X-Frame-Options, CSP.

Troubleshooting

Certificat Let’s Encrypt qui échoue

Erreur 502 Bad Gateway

Impossible de joindre l’interface d’admin

Le certificat n’a pas renouvelé

Conclusion

Nginx Proxy Manager transforme la gestion d’un reverse proxy en une opération de quelques clics. Tu gagnes du temps, tu limites les erreurs de conf manuelle, et tes certificats SSL se gèrent sans intervention. Parfait pour un homelab qui grossit.

Si tu cherches une alternative sans interface web, regarde Traefik avec Docker — configuration déclarative, intégration native avec les labels Docker.


🛡️ Stack testée : Debian 12, Docker 28.x, Docker Compose v2, Nginx Proxy Manager v2.14.0

Pour aller plus loin

Previous
Netdata Docker : monitorer ton serveur en temps réel sans te ruiner
Next
PATH Windows : maîtrise l'ajout de programmes, dossiers et scripts (2026)