Docker Réseau

Nginx Proxy Manager : HTTPS et noms de domaine pour tout son homelab

· 14/04/2026 · Mis à jour le 24/04/2026 · 6 min de lecture
En bref — Nginx Proxy Manager (NPM) est un reverse proxy avec UI web qui gère Let’s Encrypt tout seul. Installé en LXC sur Proxmox via community-scripts. J’y connecte tous mes services homelab : Home Assistant, Immich, Beszel, Proxmox, chacun sur un sous-domaine HTTPS propre. Plus aucune IP à retenir. Et pour les services sans authentification native, NPM + PocketID ajoute une couche SSO en quelques lignes de config.

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.

Tableau de bord Nginx Proxy Manager : 55 hôtes proxy actifs
Le dashboard NPM : 55 hôtes proxy configurés, 0 redirection, interface claire.

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)
Modifier un hôte proxy dans NPM : nom de domaine, IP interne, port, options WebSockets et sécurité
Configuration d’un proxy host : domaine, IP:port interne, liste d’accès, bloquer les exploits courants et WebSockets activés.

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.

Certificats Let's Encrypt dans NPM via le provider OVH : certificat wildcard actif
Certificat wildcard Let’s Encrypt généré via DNS challenge OVH, renouvelé automatiquement par NPM.

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.

Liste des hôtes proxy dans NPM : sources, destinations, SSL Let's Encrypt, statut En ligne
Tous les services du homelab listés avec leur sous-domaine, l’IP interne cible, le fournisseur SSL et le 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.
Listes d'accès NPM : Maison (30 hôtes, réseau local) et IP Externe (1 hôte, IPs restreintes)
Deux listes d’accès : « Maison » pour les 30 services LAN uniquement, « IP Externe » pour les accès restreints.

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 :

Configuration Nginx personnalisée dans NPM pour l'authentification Tinyauth et PocketID SSO
La config Nginx personnalisée : auth_request vers Tinyauth, bypass LAN par regex IP, redirection login PocketID pour les accès externes non authentifiés.

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.

Paramètres NPM : site par défaut configuré sur Aucune réponse 444 pour les hôtes inconnus
Réponse 444 pour tout hostname inconnu : les scanners ne reçoivent rien, même pas un code d’erreur.

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.

Vous avez aimé cet article ?

Rejoignez la newsletter : nouveaux articles & contenu exclusif directement par mail, sans pubs.

Je m'abonne

Pour aller plus loin