Nginx Proxy Manager

Tutoriel Nginx Proxy Manager

Tutorial Thumbnail

Dans ce tutoriel, nous allons nous intéresser à l'installation et à la configuration d'un reverse Proxy que j'ai nommé Nginx Proxy Manager.


Nginx Proxy Manager est un reverse-proxy simplifié capable de fournir aux usagers ne souhaitant pas forcément s'attarder sur le configuration de Nginx une configuration et une administration simple. Basé sur OpenResty, l'outil apporte une gestion simple centralisée depuis une interface Web capable de rendre accessible, depuis l'extérieur, différents services comme des serveurs Web, de jeu ou de mail par exemple.




Rappel du principe d'un Reverse Proxy

Pour rappel, un serveur reverse-proxy est un serveur que l'on va placer devant un ou plusieurs serveurs d'applications. Son rĂŽle principal est de fournir une passerelle d'accĂšs entre le rĂ©seau Internet et le rĂ©seau de serveur accessible en DMZ (rĂ©seau contenant des machines accessibles depuis Internet) oĂč sont hĂ©bergĂ©es les serveurs de ressources comme un serveur de messagerie, de jeu par exemple.


L'avantage de disposer d'un serveur Reverse-Proxy est de permettre avec une seule adresse IP publique de "dispatcher" les différents serveurs de ressources en un serveur de gestion ouvert en front sur Internet.



Fonctionnement d'un serveur Reverse Proxy


Dans le schĂ©ma de reprĂ©sentation, un utilisateur lambda souhaite accĂ©der au site Web www.vemotech.fr, qui est un serveur Web interne. Il va dans un premier temps envoyer une requĂȘte Ă  destination du reverse proxy, reprĂ©sentĂ© en vert entre la requĂȘte client et le firewall, puis la DMZ, qui se chargera d'associer le sous domaine www vers le serveur interne configurĂ© dans le reverse proxy.


Entre deux, un firewall effectue un contrÎle d'accÚs aux ressources nécessaires au serveur reverse proxy (services HTTPS & HTTPS) afin de gérer au mieux le niveau de sécurité du réseau DMZ. Enfin, en retour, l'utilisateur obtient en retour le site internet demandé. Le serveur reverse proxy ouvert sur Internet, avec redirection des ports HTTP (80) & HTTPS (443).


Il est donc à noter que seul ce serveur sera accessible depuis Internet depuis les service HTTP & HTTPS et qu'un aucun cas l'internaute n'aura accÚs directement au serveur d'application hébergé dans la DMZ.


Préparation de l'environnement

Dans la préparation de l'environnement, nous allons mettre en place deux serveurs et un pare-feu, joignable depuis l'extérieur uniquement par le biais du serveur Nginx Proxy Manager.



Topologie du réseau avec Nginx Proxy Manager


Je prépare deux serveurs sous Debian dont un pour installer Nginx Proxy Manager et un autre pour faire office de serveur Web. Un domaine public nommé cosmotech.cf fera office de domaine principal et qui sera associé à une adresse IP publique qui portera le serveur Reverse Proxy derriÚre. Dans ce cas de figure, un pare-feu Stormshield agira en tant que gestionnaire d'accÚs entre le serveur Nginx Proxy Manager et les ressources internes à la DMZ.


Nginx Proxy Manager se base sur Docker, donc il est nĂ©cessaire d'avoir installer Docker au prĂ©alable (un tutoriel consacrĂ© Ă  l'installation de Docker est disponible juste ici et un autre liĂ© Ă  l'installation de DockerFile juste lĂ  😉). Un pare feu Stormshield va gĂ©rer les accĂšs au serveur Web par une rĂšgle Reverse NAT. Ce pare-feu Sur le serveur Web Debian, j'ai dĂ©cidĂ© d'installer un serveur Apache afin de faire office de serveur Web interne.


Le fait d'avoir un pare-feu entre les deux n'est pas obligatoire mais il est fortement recommandé afin d'avoir au minimum un réseau bien géré et sécurisé

Quelques prérequis afin de de suivre ce tutoriel :

  • Un serveur Linux disposant de Docker et de Docker Compose afin d'installer le container ;
  • Disposer d'un nom de domaine public (ou privĂ© si vous disposez d'un serveur DNS local) ;
  • Ouvrir les ports 80 pour le HTTP et 443 pour le HTTPS afin que le serveur Nginx Proxy Manager puisse communiquer Ă  l'extĂ©rieur (ou mettez votre Firewall en mode DMZ ou Bridge).


Installation de Nginx Proxy Manager

Afin d'installer Nginx Proxy Manager, il est nécessaire d'avoir installé Docker et Docker Compose (des tutoriels sont consacrés à ce sujet : Installer Docker et Docker Compose).


Dans un premier temps, nous allons créer un répertoire qui contiendra l'ensemble des fichiers de Nginx Proxy Manager :

mkdir nginxproxymanager
cd nginxproxymanager


Ensuite, nous allons créer un fichier YML que l'on nommera docker-compose.yml dans lequel nous allons inscrire la configuration à avoir pour l'image de Nginx Proxy Manager.

nano docker-compose.yml


Dans ce fichier, nous allons écrire la configuration suivante, les instructions nécessaire à la construction de l'image :

version: "3"
services:
 app:
  image: 'jc21/nginx-proxy-manager:latest'
  restart: unless-stopped
  ports:
   # These ports are in format <host-port>:<container-port>
   - '80:80'                                     # Port HTTP public
   - '443:443'                                   # Port HTTPS public
   - '81:81'                                     # Port d'administration Web (ne doit pas ĂȘtre accessible de l'extĂ©rieur)
   # Add any other Stream port you want to expose
   # - '21:21' # FTP
  environment:
   DB_MYSQL_HOST: "db"                           # Nom d'hĂŽte du serveur SQL
   DB_MYSQL_PORT: 3306                           # Port d'Ă©coute par dĂ©faut de MySQL / MariaDB
   DB_MYSQL_USER: "npm"                          # Utilisateur de la base SQL de Nginx Proxy Manager
   DB_MYSQL_PASSWORD: "Passw0rd1!"               # Mot de passe de l'utilisateur npm (Ă  modifier !)
   DB_MYSQL_NAME: "npm"                          # Nom de la base de donnĂ©es de Nginx Proxy Manager
   # Uncomment this if IPv6 is not enabled on your host
   # DISABLE_IPV6: 'true'
  volumes:
   - ./data:/data
   - ./letsencrypt:/etc/letsencrypt
  depends_on:
   - db

 db:
  image: 'jc21/mariadb-aria:latest'
  restart: unless-stopped
  environment:
   MYSQL_ROOT_PASSWORD: 'Sup€r@R00TPasswd0rd2'   # Mot de passe SQL compte Root (Ă  modifier !)
   MYSQL_DATABASE: 'npm'                         # Nom de la base de donnĂ©es de Nginx Proxy Manager
   MYSQL_USER: 'npm'                             # Utilisateur de la base SQL de Nginx Proxy Manager
   MYSQL_PASSWORD: 'Passw0rd1!'                  # Mot de passe de l'utilisateur npm (Ă  modifier !)
  volumes:
   - ./data/mysql:/var/lib/mysql


Dans la configuration, assurez-vous de spĂ©cifier des informations de connexions diffĂ©rentes (nom d'utilisateur & mot de passe). Utilisez les mĂȘmes informations de connexions de la partie "DB_" comme pour la partie "MYSQL_".


De plus, au niveau de l'ouverture de vos ports depuis l'extérieur, nous vous recommandons de ne pas ouvrir le port 81 TCP, nécessaire à la gestion du serveur Nginx Proxy Manager. L'usage de l'interface d'administration n'est nécessaire qu'en interne (sauf si vous utilisez un serveur distant, dans ce cas utilisez un VPN).



Une fois le fichier modifié et enregistré, il ne vous reste plus qu'à lancer votre image dans le répertoire créé (dans notre cas le dossier nginxproxymanager) avec Docker Compose !

sudo docker-compose up -d


Téléchargement et configuration des fichiers de Nginx Proxy Manager & le serveur SQL avec le fichier docker-compose.yml


On s'assure que le container est bien en cours d'exécution :

sudo docker-compose ps


Récupération des containers lancés et en cours par Docker Compose


Nous avons bien nos deux services lancés en tùche de font : notre service Nginx Proxy Manager et notre serveur MariaSQL. Nous pouvons constater que le répertoire ~/nginxproxymanager contient maintenant les fichiers nécessaires à l'image :



Données ajoutées dans le répertoire courant durant la premiÚre exécution du fichier Docker Composer


Vous pouvez arrĂȘter ou relancer Ă  nouveau l'image. Cette procĂ©dure gardera en mĂ©moire les fichiers de configurations modifiĂ©s :

cd ~/nginxproxymanager
sudo docker-compose up -d
sudo docker-compose down


Gestion de l'Ă©tat du container de Nginx Proxy Manager


En allant directement sur l'adresse IP du serveur sur le port 80, vous pouvez constater qu'une page par défaut est affichée :



Page par défaut de Nginx Proxy Manager sur le port 80 (HTTP)



En allant Ă©galement sur le port d'administration 81, vous pouvez visualiser l'espace d'authentification de Nginx Proxy Manager :



Page de connexion Ă  l'espace d'administration de Nginx Proxy Manager sur le port 81


La page en HTTPS est disponible car le certificat autosigné est présenté, mais n'est pour le moment pas opérationnelle (code ERR_EMPTY_RESPONSE sur Chromium).


PremiĂšre connexion

Une fois que notre installation est opérationnelle, il est maintenant temps de faire le tour du propriétaire ! Connectez-vous dans un premier temps sur l'adresse IP de votre serveur suivit du port 81 (exemple : http://<ip_or_fqdn>:81).


Renseignez ensuite les informations de connexions par défaut :




Lors de la connexion, si vous obtenez une erreur "Bad Gateway", laissez un peu de temps afin que le systĂšme se mette en place en interne (j'ai eu ce problĂšme et j'ai patientĂ© un peu et ça a fonctionnĂ© pour moi ! 😁).


Une fois la connexion effectuée, un assistant s'ouvre afin d'éditer les informations du compte administrateur de Nginx Proxy Manager :




Choisissez ensuite un mot de passe robuste que vous n'utilisez pas ailleurs (Qu'attendez-vous d'ailleurs pour utiliser un gestionnaire de mot de passe tels que Keepass ou Bitwarden ?! đŸ€”) :




Prise en main de l'interface

Vous voici dÚs à présent sur le Dashboard de Nginx Proxy Manager ! Sur cette page, vous obtenez un récapitulatif des proxies et des différentes rÚgles Nginx créées. Sur l'ensemble des pages, vous disposez d'une barre de gestion des hÎtes, des listes d'accÚs, des certificats SSL, des utilisateurs sur Nginx proxy Manager, d'une visualisation des journaux d'audits et ainsi que les paramÚtres des pages de Nginx présentes par défaut, encadré en vert.


Page principale

Encadré en orange, vous pouvez modifier les différentes informations du compte connecté tels que l'adresse Email, le nom ou son mot de passe. Vous pouvez modifier l'avatar si le mail choisi est enregistré chez Gravatar.



Nginx Proxy Manager dispose de plusieurs menu et sous-menus afin de gérer les différents Virtual Hosts et divers évÚnements :

  • Hosts : Onglet principal destinĂ© Ă  configurer les sous domaine Ă  "proxifier" par Nginx Proxy Manager.
  • Proxy Hosts : Un hĂŽte proxy est le point d'arrivĂ©e d'un service Web que vous souhaitez transfĂ©rer. Il fournit une terminaison SSL optionnelle pour votre service qui pourrait ne pas avoir de support SSL intĂ©grĂ©. Les hĂŽtes proxy sont l'utilisation la plus courante du gestionnaire de mandataires Nginx.
  • Redirection Hosts : Un hĂŽte de redirection redirigera les demandes du domaine entrant et poussera l'internaute vers un autre domaine. La raison la plus courante d'utiliser ce type d'hĂŽte est lorsque votre site Web change de domaine mais que vous avez toujours des liens de moteur de recherche ou de rĂ©fĂ©rent pointant vers l'ancien domaine.
  • Streams : Il s'agit d'une fonctionnalitĂ© relativement nouvelle pour Nginx, un Stream servira Ă  transfĂ©rer le trafic TCP/UDP directement vers un autre ordinateur du rĂ©seau. Si vous utilisez des serveurs de jeux, des serveurs FTP ou SSH, cela peut s'avĂ©rer utile.
  • 404 Hosts : Un hĂŽte 404 est simplement une configuration d'hĂŽte qui affiche une page 404. Cela peut ĂȘtre utile lorsque votre domaine est listĂ© dans les moteurs de recherche et que vous souhaitez fournir une page d'erreur plus agrĂ©able ou spĂ©cifiquement pour indiquer aux indexeurs de recherche que les pages du domaine n'existent plus. Un autre avantage de ce type d'hĂŽte est qu'il permet de suivre les logs des visites et de voir les rĂ©fĂ©rents.
  • Access Lists : Les listes d'accĂšs fournissent une liste noire ou une liste blanche d'adresses IP de clients spĂ©cifiques ainsi qu'une authentification pour les hĂŽtes proxy via l'authentification HTTP de base. Vous pouvez configurer plusieurs rĂšgles client, noms d'utilisateur et mots de passe pour une seule liste d'accĂšs, puis l'appliquer Ă  un hĂŽte proxy. Cette fonction est particuliĂšrement utile pour les services Web transfĂ©rĂ©s qui ne disposent pas de mĂ©canismes d'authentification intĂ©grĂ©s ou que vous souhaitez protĂ©ger contre l'accĂšs de clients inconnus.
  • SSL Certificates : La gestion des certificats SSL/TLS sont prĂ©sentĂ©s ici par nom d'hĂŽte et sont crĂ©Ă©s par Let's Encrypt. Les certificats ont une durĂ©e de 3 mois et sont automatiquement renouvelĂ© par CertBot.
  • Users : L'espace des comptes de gestion du panneau de configuration de Nginx Proxy Manager (par dĂ©faut, seul le compte Super-Administrateur configurĂ© lors du premier lancement de Nginx Proxy Manager est disponible).
  • Audit Log : L'espace prĂ©sente une visualisation de toutes les actions effectuĂ©es sur Nginx Proxy (crĂ©ation d'un proxy, ajout d'un utilisateur...).
  • Settings : PossibilitĂ© de configurer la page par dĂ©faut si le domaine Ă  configurĂ© est ouvert sur internet mais que Nginx Proxy Manager ne dispose pas d'une configuration pour ce sous domaine. Dans ce cas, au choix, vous pouvez afficher la page par dĂ©faut de "FĂ©licitations", afficher une page "404 : introuvable", crĂ©er une redirection 301 ou alors ajoutez votre propre code HTML.


Créer un nouvel hÎte Proxy avec HTTPS

Un hÎte proxy est le point d'arrivée d'un service Web que vous souhaitez transférer. Il fournit une terminaison SSL optionnelle pour votre service qui pourrait ne pas avoir de support SSL intégré. Les hÎtes proxy sont l'utilisation la plus courante du gestionnaire de mandataires Nginx. Commençons à ajouter un hÎte proxy en allant dans Hosts > Proxy Hosts > Add Proxy Host.




Lors de ce nouvel enregistrement, spécifiez le nom complet du domaine incluant ainsi le sous domaine de votre choix. Lors de la saisie, appuyez sur la touche "Entrer" dans la propriété "Domain Names" afin de valider l'ajout du domaine.



Renseignez dans un premier le nom de domaine complet. Choisissez ensuite dans "Scheme", soit HTTP ou HTTPS, qui sera la méthode d'appel au serveur d'origine. Dans la partie "Forward Hostname / IP", spécifiez l'adresse IP ou le nom DNS du serveur réel et ainsi que son port de redirection dans "Forward Port", si jamais votre application tourne sur un port différent de 80 ou 443.

L'option "Block Common Exploits" est une fonctionnalité à activer et qui bloque les attaques de base qui pourrait atteindre le site proxifié tels que le Spam, les UserAgent malveillants, les injections SQL, les exploits...


Enfin, la notion de liste d'accÚs sera définit par défaut, c'est à dire que tous le monde aura accÚs au site proxifié sans authentification HTTP. Plus tard dans le tutoriel, nous auront la possibilité de restreindre l'accÚs avec une authentification HTTP gérée par Nginx Proxy Manager applicable à un Proxy.


Dans "Custom Location", vous pouvez dĂ©cider de rendre accessible le contenu d'un dossier sur le serveur d'origine. Par exemple, si vous avez un rĂ©pertoire public destinĂ© au serveur Web avec plusieurs sous dossier contenant des sites diffĂ©rents, dĂ©finissez alors le chemin du dossier Ă  rendre accessible au proxy et mĂȘme les paramĂštres d'accĂšs HTTP. Une roue crantĂ©e offre la possibilitĂ© d'insĂ©rer sa propre configuration Nginx pour ce proxy.




Actuellement, nous pouvons remarquer que le site dispose d'une connexion HTTPS avec un certificat TLS. En effet, ce certificat est géré par Cloudflare. Mais qu'advient-il si je n'utilise pas Cloudflare et que je souhaite disposer d'une connexion HTTPS ?

Dans l'onglet SSL, sélectionnez votre propre certificat que vous avez importé ou créé dans l'onglet "SSL Certificate" ou générez-en un automatiquement avec Let's Encrypt & Certbot.




Plusieurs options de gestion TLS/SSL sont disponibles :



Activez l'option "Force SSL" afin de chiffrer en permanence le trafic. Activez Ă©galement le support HTTP/2 qui accĂ©lĂšre la vitesse de chargement des pages par la compression des en-tĂȘte HTTP par une seule connexion TCP entre le client et le serveur.


Activez ou non l'option HSTS qui consiste à bloquer complÚtement l'accÚs au site si il y a un problÚme de conformité avec le certificat TLS (soit il auto-signé, révoqué, a expiré...). Donc si dans votre navigateur vous recevez une erreur indiquant un problÚme de certificat, impossible de cliquer sur "Continuer vers..." afin d'ajouter une exception de sécurité.


Dans le menu "Advanced", vous pouvez Ă©crire des instructions Ă  affecter Ă  la configuration de Nginx comme l'ajout d'en-tĂȘte supplĂ©mentaire par exemple :


more_set_headers "MyHeader: value";



Une fois l'enregistrement créé, il sera listé sur la page des hÎtes proxy. En essayant d'accéder au sous domaine créé, il est inaccessible... En effet, nous n'avons pas encore créé notre enregistrement DNS !




AccĂ©dez au panneau de configuration de votre domaine et ajoutez un enregistrement de type CNAME afin de faire pointer le sous domaine sur le domaine racine. L'enregistrement peut ĂȘtre instantanĂ© comme peu prendre un certain temps avant d'ĂȘtre propagĂ©.




En tentant d'accéder maintenant au sous domaine web.cosmotech.cf, nous visualisons notre superbe site internet !



Notre site est dĂ©sormais en ligne ! 🎉


Gestion des accĂšs Ă  un site internet

Dans le cas oĂč une application ne dispose pas d'un systĂšme d'authentification utilisateur intĂ©grĂ© ou que vous souhaitez restreindre une application en plus de l'authentification afin d'Ă©viter le rĂ©fĂ©rencement de celle-ci par exemple, Nginx Proxy Manager propose une solution permettant de gĂ©rer les listes d'accĂšs par des comptes utilisateurs ou par restrictions d'adresse IP.



Dans l'onglet "Access list", vous pouvez crĂ©er un profil de restriction qui pourra ĂȘtre affectĂ© Ă  un site. En cliquant sur "Add Access List", deux niveaux d'authentifications sont possibles :

  • L'authentification par utilisateurs : une authentification par compte utilisateur crĂ©Ă© avec Apache HTPasswd sur le serveur reverse-proxy. Elle se base sur l'authentification basique proposĂ©e par Nginx.
  • L'authentification par adresse IP : accĂšs au site ou non sans authentification utilisateur, se basant uniquement sur une adresse ou un bloc d'adresse IP, qui peut ĂȘtre soit autorisĂ© ou bloquĂ©.



Dans le menu "Details", vous pouvez renseigner un nom explicit à la rÚgle afin de mieux l'identifier (exemple : Checkpoint_Auth_SrvWeb). Deux options suivantes sont proposées :

  • L'option "Satisfy Any" : signifie que l’autorisation ou les blocs d'adresses IP spĂ©cifiĂ©s doivent correspondre mais pas les deux. Si vous dĂ©sactivez l'option, le compte utilisateur ET l'adresse IP doit correspondre afin de valider l’accĂšs au serveur reverse-proxy. Cela peut ĂȘtre trĂšs utile si vous avez des adresses IP qui peuvent ĂȘtre valides pour accĂ©der Ă  une application, mais cela n’est pas sĂ©curisĂ© par l’authentification par mot de passe.
  • L'option "Pass Auth to Host" : fonctionnalitĂ© intĂ©ressante oĂč vous pouvez transfĂ©rer l'authentification effectuĂ©e sur reverse-proxy au serveur rĂ©el derriĂšre avec l’indicateur « Passer l’authentification Ă  l’hĂŽte ». Cela enverra un paquet HTTP Basic Auth (accĂšs intĂ©ressant dans le cadre d'une authentification Radius sur le serveur rĂ©el, une application ou pour une API par exemple).


Restrictions par authentification utilisateur

Dans le menu "Authorisation", vous pouvez ajouter Ă  votre guise les comptes utilisateurs d'accĂšs :



Dans l’onglet "Autorisation", vous pouvez entrer des noms d’utilisateur et des mots de passe pour authentifier les utilisateurs auprùs de votre application ou service.


La connexion sera gérée par Nginx Proxy Manager et le formulaire sera semblable à celui-ci :




Restriction par adresses IP

Dans le menu "Access", ajoutez une adresse IP ou un bloc d'adresse IP est renseignez si il doit ĂȘtre WhitelistĂ© ou BlacklistĂ© du reverse proxy :



Vous pouvez sĂ©lectionner ce menu si vous souhaitez autoriser ou bloquer des adresses IP spĂ©cifiques. Les rĂšgles sont appliquĂ©es dans l’ordre d'ajout, de sorte que lorsqu’il y a une correspondance, toutes les autres rĂšgles ci-dessous sont ignorĂ©es. Il est important de mentionner que vous ne pouvez pas seulement entrer une seule adresse IP, mais aussi des rĂ©seaux. Donc, dans cet exemple, j’ai autorisĂ© le rĂ©seau 10.28.0.0/24 Ă  accĂ©der au proxy. Cela signifie que toutes les adresses IP de 10.28.0.1 Ă  10.28.0.254 sont autorisĂ©es Ă  se connecter via cette liste d’accĂšs. En revanche, les adresses IP comprises entre 114.21.95.1 et 114.21.95.254 ne sont pas autorisĂ©es et sont donc bloquĂ©es.


Sur la version derniĂšrement publiĂ©, un bug graphique est prĂ©sentĂ© lorsque l'on a dĂ©jĂ  renseignĂ© plusieurs informations dans la liste des comptes et des adresses IP. Si on clique sur le bouton "Add" afin d'ajouter de nouveaux champs, cette action efface la liste. En attendant, cliquez plusieurs fois sur le bouton "Add" mĂȘme si vous ne remplissez pas tout et ça devrait aller 😉


Activer la liste d'accĂšs

Une fois notre liste d'accÚs créée, elle apparait dans la partie "Access Lists". C'est à cet endroit que vous allez pouvoir gérer les rÚgles créées.




Il ne reste maintenant plus qu'Ă  activer notre "protection" Ă  un hĂŽte Proxy afin de lui affecter la liste d'accĂšs crĂ©Ă©e prĂ©cĂ©demment. Rendez-vous dans Hosts > Proxy Hosts. Éditer la configuration d'un hĂŽte oĂč vous souhaitez ajouter la liste d'accĂšs. Par dĂ©faut, l'accĂšs est considĂ©rĂ© comme "Public" :




En bas de la fenĂȘtre, dans la partie "Access List", sĂ©lectionnez la configuration que vous avez ajoutĂ©e :




Valider les changements effectués, et en tentant d'accéder à l'URL et en renseignant les logins spécifiés :




On remarque alors que le site internet s'affiche convenablement ! 😁



Certificat multi-domaine

Afin de rendre ce qui prĂ©cĂšde encore plus simple dans Nginx Proxy Manager, nous pouvons crĂ©er ce que l’on appelle un certificat gĂ©nĂ©rique. L'objectif est d'effectuer une demande DNS automatiquement pour crĂ©er un certificat Wildcard pour chaque domaines et sous domaines. Les avantages sont qu'au lieu d’en crĂ©er un pour chaque sous-domaine comme ci-dessus, il est plus intĂ©ressant d'en crĂ©er qu'un seul pour tous le monde et que toujours il y aura un certificat de proposĂ© si le certificat du sous-domaine n'est pas encore installĂ© et configurĂ©.


Dans notre exemple, nous allons utiliser Cloudflare afin de "relier" Nginx Proxy Manager via l’API proposĂ©e. En fonction du fournisseur de domaine, l'opĂ©ration est similaire Ă  celle proposĂ©e. Consulter ainsi les documentations associĂ©es aux diffĂ©rents fournisseurs rĂ©pandus comme OVH, Infomaniak, Ionos, DigitalOcean, GoDaddy...


Cela vous permettra d’utiliser essentiellement le mĂȘme certificat (*.cosmotech.cf). Dans un premier temps, allez sur le panneau d'administration de Cloudflare et cliquez sur le nom de domaine associĂ©. Il vous amĂšnera Ă  la page principale avec quelques graphiques et "Actions rapides" en haut Ă  droite.

En bas Ă  droite, au niveau de la section "API", vous verrez l’ID de zone API et l’ID de compte. En dessous, vous devez cliquer sur Obtenir votre jeton d'API (ou directement accessible via https://dash.cloudflare.com/profile/api-tokens).




Dans le menu de gestion des API de Cloudflare, vous y retrouvez les jetons créés pour tous les domaines enregistrés sur votre compte Cloudflare. En haut de la page, cliquer sur "Créer un jeton" :




En bas de la page, créez un jeton API personnalisé afin de configurer manuellement les autorisations que nous souhaitons :




Choisissez un nom explicit au jeton (le token) API (par exemple : DNSEdit_CosmoTech_NginxProxyManager => module + action + site + service). Dans les autorisations, sélectionnez dans le premier menu "Zone", puis "DNS" et comme action d'édition. Au niveau des ressources de la zone, choisissiez d'inclure une zone spécifique ayant comme valeur votre site (ex : cosmotech.cf).




Vous devriez visualiser ensuite un récapitulatif du Token qui sera créé et valider la création.




Enfin, vous obtenez le Token avec les droits affectés sur Cloudflare :




Sur notre machine Linux, vous pouvez tester l'appel de l'API avec Curl afin de vérifier son bon fonctionnement :

curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
     -H "Authorization: Bearer {YOUR_API_KEY}" \
     -H "Content-Type:application/json"



On remarque le Token est bien valide. Copiez le Token du premier encadrĂ©, car nous en aurons besoin sur Nginx Proxy Manager. 😉


Dans notre interface de gestion de Nginx Proxy Manager, dans la partie "SSL Certificates", ajoutez un nouveau certificat SSL Let's Encrypt. Saisissez le domaine Wildcard pour le certificat (*.cosmotech.cf) et activez l'option "Use DNS Challenge". Une section particuliÚre apparait et sélectionnez dans le menu déroulant "DNS Provider" votre fournisseur de domaine. Dans notre cas, en sélectionnant Cloudflare, automatiquement une récupération est effectuée dans le champ "Credentials File Content" afin de ne plus qu'à spécifier la clé API que vous avons créée :

# Cloudflare API token
dns_cloudflare_api_token = {YOU_API_KEY}



Remplacez dans le champ bleu par votre clé API, acceptez les conditions générales des services de Let's Encrypt et enregistrez la configuration.


Si vous utilisez un domaine gratuit comme dans mon cas, Cloudflare restreint parfois son API aux domaines .cf, .ga, .gq, .ml, ou .tk afin d'Ă©viter les abus... Si le domaine gratuit a Ă©tĂ© rĂ©cemment crĂ©Ă©, attendez sa propagation et attendez avant de spĂ©cifier directement les serveurs DNS de Cloudflare Pour les autres domaines payants, l'opĂ©ration doit normalement fonctionner 😀.

Votre certificat est ensuite crĂ©Ă© et vous n'avez plus qu'Ă  le spĂ©cifier Ă  domaine souhaitĂ© ! 😎


Enregistrement DNS Wildcard pour Nginx Proxy Manager

Si pour des raisons techniques ou que vous ne voulez pas toujours accéder à votre gestionnaire DNS de votre fournisseur de nom de domaine, vous pouvez rajouter un enregistrement soit A ou CNAME avec une valeur Wildcard (*) suivit soit de l'adresse IP ou du domaine afin de faire correspondre chaque domaine qui sera ajouté sur Nginx Proxy Manager, qui symbolise tous les sous domaines.




De ce fait, en saisissant n'importe quel sous domaine, vous tomberais automatiquement sur la page par défaut du reverse-proxy. En revanche, si un nom de domaine a déjà été configuré, alors le sous domaine pointera vers la configuration existante.


Dans notre exemple, nous avons configuré le sous domaine web.cosmotech.cf :




Si je saisie maintenant un domaine totalement aléatoire :



Nous remarquons que nous sommes redirigé sur la page de Bienvenue par défaut définie depuis Nginx Proxy Manager.


Personnaliser la page par défaut

Vous pouvez également personnaliser la page Web par défaut du serveur Nginx Proxy Manager. Cliquez sur le menu Settings > Default site et sélectionnez Edit. Vous pouvez choisir soit d'afficher une erreur 404, de rediriger vers une nouvelle adresse ou de créer une page personnalisée :




Par exemple, voici le rendu d'une page personnalisée visible pour les enregistrements DNS créés mais pas configurés sur Nginx Proxy Manager :



Conclusion

Et voilĂ , maintenant vous savez (presque) tout sur Nginx Proxy Manager. Ce serveur reverse proxy est principalement connu pour sa simplicitĂ© et son interface moderne et surtout qu'il est tellement plus simple d'utiliser Nginx maintenant ! N'hĂ©sitez-pas Ă  nous solliciter pour toute question particuliĂšres dans le forum 🎉

Niveau DĂ©butant

Technologie utilisée :

Proposer une modification
Antoine
Par Antoine
Rédigé le Lundi 18 Avril 2022