skip to content

Recherche

Syspirit
FR

#Nginx Proxy Manager : Reverse Proxy & SSL

5 minutes de lecture Karl Certa
Couverture Nginx Proxy Manager
Image générée par IA

Gérer ses reverse proxy et ses certificats SSL à la main, c’est pas la mer à boire — mais faut connaître un peu. Entre les fichiers de conf Nginx et les renouvellements Let’s Encrypt, ça peut vite devenir pénible. Nginx Proxy Manager rend tout ça plus simple et plus visuel.

C’est quoi Nginx Proxy Manager ?


Nginx Proxy Manager est un outil basé sur Nginx qui permet de gérer ses reverse proxy et ses certificats SSL via une interface web. Plus besoin d’aller trifouiller les fichiers de conf !

Ce que ça permet (entre autres) :

  • Créer des reverse proxy en quelques clics
  • Générer et renouveler automatiquement des certificats SSL (Let’s Encrypt)
  • Gérer des certificats wildcard via DNS Challenge
  • Le tout avec une interface propre et claire

C’est quand même plus accessible et sympa que d’éditer des fichiers à la main.

Mon use case : SSL local sur le homelab


Dans mon cas, j’utilise Nginx Proxy Manager pour mon homelab. Mon objectif : avoir du HTTPS sur mes applis en local avec mon nom de domaine public.

Mon nom de domaine est hébergé chez Infomaniak, mais je gère le DNS via Cloudflare — principalement pour ce blog (Cloudflare Pages). Du coup, autant en profiter pour l’intégration Let’s Encrypt aussi. Mais Infomaniak aurait très bien pu faire l’affaire.

Concrètement :

  • proxmox.syspirit.fr → Proxmox VE
  • nginx.syspirit.fr → Nginx Proxy Manager
  • zabbix.syspirit.fr → Zabbix
  • etc.

Les enregistrements DNS sont gérés en local sur mon Pi-hole, et j’utilise un certificat wildcard *.syspirit.fr pour couvrir tous les sous-domaines.

Installation avec Docker Compose


L’installation est simple avec Docker. Voici le docker-compose.yml :

services:
  app:
    image: jc21/nginx-proxy-manager:latest
    container_name: nginx-proxy-manager
    restart: always
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    ports:
      - 80:80
      - 81:81
      - 443:443

Les ports :

  • 80 : HTTP — pour les redirections et le challenge Let’s Encrypt
  • 81 : Interface d’administration
  • 443 : HTTPS

Un petit docker-compose up -d et c’est parti !

Pour plus de détails, la doc officielle est bien faite.

Premier accès


Une fois le conteneur lancé, l’interface est accessible sur http://<IP_DU_SERVEUR>:81.

Identifiants par défaut :

  • Email : admin@example.com
  • Mot de passe : changeme

À la première connexion, NPM vous demande de créer votre propre compte admin. Faites-le immédiatement !

Créer un certificat SSL Wildcard


Pour générer un certificat wildcard *.syspirit.fr, on va utiliser le DNS Challenge avec Cloudflare. Ça permet à Let’s Encrypt de vérifier qu’on possède bien le domaine sans avoir besoin d’exposer le port 80 sur internet.

Créer un token API Cloudflare

NPM a besoin d’un accès à l’API Cloudflare pour créer automatiquement les enregistrements DNS nécessaires à la validation.

  1. Dans Cloudflare, aller dans My ProfileAPI TokensCreate Token
  2. Choisir Custom token
  3. Configurer les permissions :
    • ZoneDNSEdit
    • ZoneDNSRead
  4. Dans Zone Resources, sélectionner le domaine concerné : InclureZone Spécifiquesyspirit.fr
  5. Créer le token et le copier — il ne sera plus visible après

Générer le certificat dans NPM

  1. Dans NPM, aller dans SSL CertificatesAdd CertificateLet’s Encrypt via DNS
  2. Remplir le champs Domain Names : *.syspirit.fr
  3. Sélectionner Cloudflare comme DNS Provider
  4. Coller le token API dans le champ Credentials File Content au format :
    # Cloudflare API token
    dns_cloudflare_api_token=0123456789abcdef0123456789abcdef01234567
    
  5. Cliquer sur Save — NPM va créer un enregistrement TXT temporaire et valider le certificat
Ajout d&#x27;un certificat SSL Let&#x27;s Encrypt via DNS Challenge

Le certificat se renouvellera automatiquement avant expiration.

Créer un Proxy Host


Maintenant qu’on a notre certificat wildcard, on peut créer des proxy hosts pour accéder à nos services en HTTPS.

Prenons l’exemple de NPM lui-même : on va le rendre accessible via nginx.syspirit.fr.

  1. Dans NPM, aller dans HostsProxy HostsAdd Proxy Host
  2. Onglet Details :
    • Domain Names : nginx.syspirit.fr
    • Scheme : http
    • Forward Hostname / IP : 192.168.1.52 (l’IP du serveur)
    • Forward Port : 81
    • Websockets Support : activé (utile pour l’interface NPM)
  3. Onglet SSL :
    • SSL Certificate : sélectionner le certificat wildcard *.syspirit.fr
  4. Cliquer sur Save
Configuration d&#x27;un proxy host - Onglet Details Configuration d&#x27;un proxy host - Onglet SSL

Le principe du reverse proxy : tous les sous-domaines doivent pointer vers l’IP de NPM. C’est lui qui se charge ensuite de rediriger vers le bon service en fonction du domaine demandé.

Dans mon cas, j’ajoute sur Pi-hole :

  • nginx.syspirit.fr192.168.1.52
  • proxmox.syspirit.fr192.168.1.52
  • zabbix.syspirit.fr192.168.1.52

Toujours la même IP (celle de NPM), quel que soit le service. Sans ça, le sous-domaine ne sera pas résolu en local.

Et voilà ! https://nginx.syspirit.fr pointe maintenant vers l’interface de NPM avec un certificat valide 🚀. Il suffit de répéter l’opération pour chaque service en adaptant l’IP/port de destination dans NPM.

Liste des proxy hosts dans Nginx Proxy Manager

Conclusion


Nginx Proxy Manager rend vraiment service : plus besoin de jongler avec des fichiers de conf Nginx ou de gérer les renouvellements SSL à la main. Pour un homelab, c’est franchement idéal.

Et en entreprise ? Ça peut très bien faire le job aussi, surtout pour des applications internes ou des environnements pas trop exposés. NPM reste basé sur Nginx, qui est lui-même un reverse proxy éprouvé et très utilisé en production. La différence, c’est juste l’interface graphique par-dessus.

Pour ceux qui préfèrent la ligne de commande ou qui ont besoin de configurations très spécifiques, Nginx “classique”, Traefik ou HAProxy restent des alternatives solides — mais il faut mettre les mains dans le cambouis 😅.

Liens utiles :