
Homelab 2 : une seule entrée HTTPS pour tous vos services
Chaque service que vous hébergez a besoin d'une adresse et d'un cadenas. Plutôt que d'ouvrir une porte par service, ouvrez-en une : un proxy inverse. Il reçoit chaque visiteur, garde les certificats HTTPS, et passe chaque requête au bon service à l'intérieur de votre réseau. Le nôtre, c'est Nginx Proxy Manager (NPM) : open source, avec une interface web, et il renouvelle seul les certificats Let's Encrypt.
Un peu d'histoire
Igor Sysoev a publié nginx en 2004 pour servir de nombreuses connexions simultanées avec peu de mémoire ; il est devenu l'un des serveurs web les plus utilisés au monde. Let's Encrypt, ouvert au public fin 2015, a rendu les certificats HTTPS gratuits et automatiques. Nginx Proxy Manager emballe les deux dans une interface web : un formulaire par site, et un certificat qui se renouvelle tout seul.
La preuve que c'est simple
Ce site a été mis en ligne exactement ainsi : un conteneur qui sert les pages, une entrée de proxy, un certificat, environ quinze minutes. Une petite VM suffit pour tout un homelab.
1. Le nom
Chez votre registraire de domaine, créez un enregistrement A pour votre domaine et un pour chaque sous-domaine (ou un joker *), qui pointe vers votre adresse IP publique. Vérifiez depuis l'extérieur de votre réseau que le nom répond avant d'aller plus loin.
2. La box
Dans votre box, redirigez les ports 80 et 443 vers la machine qui fait tourner le proxy. Rien d'autre.
Ne redirigez jamais le port 81 : c'est la page d'administration de NPM. Elle reste joignable depuis votre réseau domestique uniquement.
3. Le proxy
Sur une VM ou un conteneur avec Docker (voir Homelab 1), le fichier compose officiel, version épinglée :
services:
npm:
image: jc21/nginx-proxy-manager:2.16.0
restart: unless-stopped
ports:
- "80:80"
- "81:81"
- "443:443"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
docker compose up -d
Ouvrez http://<adresse-du-proxy>:81 depuis votre réseau. Un compte administrateur par défaut est créé au premier démarrage (voir la page d'installation de la documentation officielle) : connectez-vous, puis changez tout de suite son e-mail et son mot de passe.
4. Publier un service
- Hosts → Proxy Hosts → Add Proxy Host.
- Noms de domaine :
votredomaine.tld,www.votredomaine.tld. - Redirigez vers l'adresse et le port du service sur votre réseau, par exemple
192.0.2.10et8000. - Onglet SSL : demandez un nouveau certificat Let's Encrypt, cochez Force SSL.
Enregistrez : Let's Encrypt vérifie par le port 80 que le nom est bien à vous, délivre le certificat, et NPM le renouvelle avant qu'il n'expire.
Pièges
Épinglez une version plutôt que :latest : sinon une mise à jour arrive le jour où vous redémarrez, sans prévenir. Et n'ajoutez jamais privileged: true par habitude : un proxy n'a pas besoin du contrôle total de l'hôte.
Si les demandes de certificat échouent en boucle, arrêtez de réessayer : Let's Encrypt limite le nombre de certificats identiques par semaine. Corrigez d'abord la cause, en général le port 80 non redirigé ou un nom qui ne répond pas encore.
Vous testez depuis chez vous et le site ne répond pas ? Certaines box ne savent pas reboucler vers leur propre adresse publique. Testez depuis un téléphone en données mobiles avant de soupçonner le proxy.
Sources
Utile ? Dites-nous ce qu'il faut mesurer ensuite.