Tu as des dizaines de services qui tournent sur ton homelab, chacun accessible via une IP et un port. 192.168.1.10:8123 pour Home Assistant, 192.168.1.12:8090 pour Beszel, 192.168.1.15:2283 pour Immich. Impossible à retenir, impossible à partager, et surtout : zéro HTTPS. C’est là qu’entre Nginx Proxy Manager.
Ce que NPM change concrètement
Avec NPM, tu remplaces les IP:port par des noms humains sur ton domaine. Plutôt que de retenir l’adresse et le port de Home Assistant, tu accèdes à https://ha.mondomaine.fr depuis n’importe où, avec un certificat Let’s Encrypt valide renouvelé automatiquement.
C’est aussi ce qui permet de partager l’accès à un service avec quelqu’un de ta famille sans lui expliquer ce qu’est une IP ou un port. Une URL propre, ça s’envoie par message.
Ce que NPM gère :
- Reverse proxy HTTPS : tous tes services derrière un seul point d’entrée, avec SSL automatique
- Certificats Let’s Encrypt : génération et renouvellement automatiques, wildcard via DNS challenge
- Listes d’accès : certains services uniquement accessibles depuis le réseau local, d’autres exposés à l’extérieur
- Authentification SSO : via Tinyauth + PocketID pour les services sans login natif
Installation via community-scripts
Comme pour les autres services de mon homelab, j’utilise le script community-scripts.org/scripts/nginxproxymanager pour créer un LXC Proxmox dédié avec NPM préconfiguré.
Depuis le shell Proxmox :
bash -c "$(wget -qLO - https://community-scripts.github.io/ProxmoxVE/ct/nginxproxymanager.sh)"
Le script crée le LXC, installe NPM et ses dépendances, et l’expose sur le port 81 pour l’interface d’administration. Une fois le script terminé, l’interface est accessible sur http://<IP_LXC>:81.
Identifiants par défaut : admin@example.com / changeme. À changer immédiatement.
Premier aperçu
Le tableau de bord résume l’état de l’instance en un coup d’oeil : nombre de proxy hosts actifs, certificats, redirections.

Sur mon setup, 55 hôtes proxy sont configurés : services internes uniquement accessibles depuis le LAN, services exposés sur Internet, et quelques redirections.
Créer un proxy host
Hôtes > Ajouter un hôte proxy. La configuration d’un service prend une minute :
- Nom de domaine :
ha.mondomaine.fr - Schéma : http (NPM gère le HTTPS côté client, ton service reste en HTTP en interne)
- IP de destination : l’IP de ta VM ou LXC Home Assistant
- Port : 8123
- Bloquer les exploits courants : activé
- WebSockets : activé (obligatoire pour Home Assistant)

Dans l’onglet SSL : demander un nouveau certificat Let’s Encrypt, cocher « Forcer SSL ». Le certificat est généré en quelques secondes.
Certificats wildcard via DNS challenge
Pour couvrir tous les sous-domaines avec un seul certificat, j’utilise un certificat wildcard *.mondomaine.fr généré via DNS challenge OVH. NPM supporte ça nativement : dans Certificats, ajouter un certificat Let’s Encrypt avec le provider DNS de ton registrar et un token API.

Le certificat couvre automatiquement tous les nouveaux sous-domaines créés dans NPM, sans nouvelle demande à Let’s Encrypt.
Liste des hôtes actifs
Une fois les services configurés, la liste donne une vue claire de ce qui tourne : source (sous-domaine), destination (IP:port interne), fournisseur SSL et statut.

Listes d’accès
NPM permet de segmenter l’accès par liste d’IPs. Je maintiens deux listes :
- Maison : 30 services accessibles uniquement depuis le réseau local. Proxmox, PBS, NPM lui-même, les interfaces d’administration n’ont rien à faire sur Internet.
- IP Externe : 1 service exposé avec accès restreint à certaines IPs externes spécifiques.

Authentification PocketID pour les services sans login
Certains services n’ont pas de système d’authentification propre, ou on veut une couche SSO unifiée devant plusieurs outils. NPM + Tinyauth (connecté à PocketID) règle ça sans modifier le service lui-même.
Dans la configuration Nginx personnalisée d’un proxy host, on ajoute un bloc auth_request qui renvoie les requêtes non authentifiées vers PocketID :

Le flux est le suivant : chaque requête est vérifiée par Tinyauth avant d’atteindre le service. Les IPs du réseau local (regex sur 192.168.x.x) passent directement. Les accès externes non authentifiés sont redirigés vers la page de login PocketID. Une fois connecté, le token est valide pour tous les services protégés de la même façon.
Paramètre sécurité : hôtes inconnus en 444
Dans Paramètres > Site par défaut, je configure NPM pour répondre 444 (aucune réponse) aux requêtes qui arrivent sur une IP ou un hostname non configuré. Les scanners et bots qui tentent des endpoints inconnus ne reçoivent rien, pas même un code d’erreur exploitable.

DNS avec AdGuard Home
Pour l’accès local, j’utilise AdGuard Home comme serveur DNS. Les noms de domaine internes (comme ha.mondomaine.fr) y sont résolus directement vers l’IP du LXC NPM, sans passer par Internet. Résultat : les services sont accessibles depuis le réseau local exactement comme depuis l’extérieur, avec les mêmes URL et les mêmes certificats.
WebSockets obligatoire pour Home Assistant
Si tu exposes Home Assistant via NPM et que l’interface charge mais les entités ne se mettent pas à jour en temps réel, c’est le WebSocket qui est coupé. Dans la configuration du proxy host HA, active impérativement l’option « Prise en charge de WebSockets ». Sans ça, le dashboard s’affiche mais reste figé.
FAQ
Nginx Proxy Manager ou Traefik : lequel choisir en homelab ?
NPM si tu veux une UI propre et zéro config texte (Let’s Encrypt auto, hosts déclarés en clic). Traefik si tu aimes le YAML et la découverte auto depuis les labels Docker. Pour un homelab solo, NPM gagne en simplicité.
NPM gère-t-il les certificats Let’s Encrypt wildcard ?
Oui avec un challenge DNS-01 (Cloudflare, OVH, Gandi). Configure un token API chez ton registrar, colle-le dans NPM, et tu obtiens *.ton-domaine.fr automatiquement renouvelé.
Comment restreindre un service au réseau local uniquement ?
Crée une liste d’accès avec les plages IP de ton LAN (ex : 192.168.0.0/16) et assigne-la au proxy host. Toute requête venant d’une IP extérieure reçoit un 403, le service n’est jamais exposé.
Faut-il ouvrir des ports sur la box pour NPM ?
Uniquement si tu veux exposer des services sur Internet : ouvrir le port 80 et 443 vers l’IP du LXC NPM. Pour un usage 100% local, aucune ouverture de port n’est nécessaire.
Pour aller plus loin
- AdGuard Home : le DNS local qui résout tes sous-domaines en interne
- Proxmox VE : créer ses premières VMs et containers LXC : comprendre les LXC avant d’installer NPM
- Beszel : monitoring des ressources, exposé via NPM avec auth PocketID
- Mon setup homelab 2026 : vue d’ensemble du cluster et des services derrière NPM









