Prérequis
- VPS Debian 11/12 ou Ubuntu 22.04+ avec accès root
- Docker et Docker Compose installés (voir le tuto Docker)
- Ports 80, 81 et 443 ouverts
- Un nom de domaine pointant vers l'IP de votre VPS
Étape 1 : Préparer l'environnement
Créez un dossier pour NPM :
sudo mkdir -p /opt/nginx-proxy-manager
cd /opt/nginx-proxy-manager
Étape 2 : Fichier docker-compose
Créez le fichier docker-compose.yml :
sudo nano docker-compose.yml
Collez la configuration suivante :
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
environment:
DISABLE_IPV6: 'false'
Étape 3 : Démarrer le conteneur
sudo docker compose up -d
Vérifiez que le conteneur tourne :
sudo docker ps
Étape 4 : Première connexion
Ouvrez votre navigateur sur :
http://IP_DE_VOTRE_VPS:81
Identifiants par défaut :
- Email :
[email protected] - Mot de passe :
changeme
Important : changez immédiatement l'email et le mot de passe à la première connexion.
Étape 5 : Ajouter un Proxy Host
Cliquez sur Hosts → Proxy Hosts → Add Proxy Host.
Remplissez :
- Domain Names :
app.votre-domaine.com - Scheme :
http - Forward Hostname / IP : l'IP interne ou hostname du service (ex:
172.17.0.1pour l'hôte, ou le nom d'un autre conteneur Docker) - Forward Port : le port du service (ex:
3000) - Cochez Block Common Exploits
- Cochez Websockets Support si le service utilise du WebSocket
Étape 6 : Activer le SSL Let's Encrypt
Dans l'onglet SSL du même proxy host :
- SSL Certificate :
Request a new SSL Certificate - Cochez Force SSL
- Cochez HTTP/2 Support
- Cochez HSTS Enabled
- Saisissez votre email pour Let's Encrypt
- Acceptez les conditions
Cliquez sur Save. NPM contacte Let's Encrypt, valide le domaine et installe le certificat automatiquement.
Étape 7 : Sécuriser l'accès à l'interface NPM
Le port 81 expose l'interface admin. Bloquez son accès public via UFW :
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow from VOTRE_IP_FIXE to any port 81
sudo ufw enable
Étape 8 : Configurer un Stream (TCP/UDP)
Pour proxifier un service non-HTTP (Minecraft, base de données distante, etc.) :
Hosts → Streams → Add Stream
- Incoming Port : port public (ex: 25565 pour Minecraft)
- Forward Host : IP du serveur cible
- Forward Port : port du service
- TCP / UDP selon le protocole
Dépannage
"502 Bad Gateway"
Le service derrière le proxy n'est pas joignable. Vérifiez :
sudo docker exec -it nginx-proxy-manager ping IP_DU_SERVICE
Sur Docker, utilisez le nom du conteneur ou host.docker.internal plutôt qu'une IP fixe.
Certificat Let's Encrypt impossible à générer
Vérifiez que le port 80 est ouvert et que votre domaine pointe bien vers l'IP du VPS :
dig +short votre-domaine.com
Cloudflare doit être en mode DNS only (nuage gris) pendant la génération du certificat, pas en mode proxy.
Conteneur qui crash
Inspectez les logs :
sudo docker logs nginx-proxy-manager --tail 100
Commandes utiles
# Logs en temps réel
sudo docker logs -f nginx-proxy-manager
# Redémarrer NPM
sudo docker compose restart
# Mettre à jour NPM
sudo docker compose pull && sudo docker compose up -d
# Sauvegarder la config
sudo tar -czf npm-backup-$(date +%F).tar.gz data letsencrypt
Conclusion
Nginx Proxy Manager simplifie radicalement la gestion d'un reverse proxy multi-domaines. Combiné à Docker, vous pouvez désormais héberger autant de services que votre VPS peut en supporter, chacun avec son propre certificat SSL et son propre sous-domaine.
Ressources
- Site officiel : https://nginxproxymanager.com
- GitHub : https://github.com/NginxProxyManager/nginx-proxy-manager
- Tuto VeryCloud — Docker : https://verycloud.fr/docs/article/install-docker-linux



















