Nginx Proxy · 16 min read · Nov 20, 2025

Comment installer et utiliser Nginx Proxy Manager avec Docker

Un proxy inverse est un serveur web qui peut se trouver devant un autre serveur web ou un service web. Il peut chiffrer le trafic sortant, agir comme un répartiteur de charge, rediriger le trafic et offrir une protection. Le serveur web Nginx peut être utilisé comme serveur proxy devant des serveurs traditionnels, mais parfois sa configuration peut être fastidieuse et causer des problèmes si elle n’est pas effectuée correctement.

Nginx Proxy Manager est une application qui facilite la configuration de Nginx en tant que serveur proxy en fournissant une interface utilisateur graphique (GUI) avec des fonctionnalités telles que le support SSL intégré utilisant Let’s Encrypt, le support pour plusieurs hôtes, l’authentification HTTP, les listes d’accès et la gestion des utilisateurs.

Ce tutoriel vous apprendra à installer le gestionnaire de proxy Nginx sur un serveur Linux en utilisant Docker. Nous couvrirons toutes les distributions Linux populaires dans un seul tutoriel.

Prérequis

  • Un serveur Linux exécutant Ubuntu/Debian/CentOS/Alma Linux/Rocky Linux avec un minimum de 1 Go de RAM.
  • Un utilisateur non-root avec des privilèges sudo.
  • Un nom de domaine entièrement qualifié (FQDN) comme npm.example.com pointant vers le serveur.

Étape 1 - Configurer le pare-feu

Cent OS/Rocky Linux/Alma Linux

Vous devez avoir le pare-feu Firewalld installé. Vérifiez l’état du pare-feu.

$ sudo firewall-cmd --state
running

Ouvrez les ports 80, 81 et 443.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --permanent --add-port=81/tcp

Rechargez le pare-feu pour activer les modifications.

$ sudo firewall-cmd --reload

Ubuntu/Debian

Les systèmes Ubuntu et Debian utilisent ufw (Uncomplicated Firewall) par défaut.

Vérifiez si le pare-feu est en cours d’exécution.

$ sudo ufw status

S’il est en cours d’exécution, ouvrez les ports 80, 81 et 443.

$ sudo ufw allow 80
$ sudo ufw allow 81
$ sudo ufw allow 443

Ouvrez le port SSH si le pare-feu n’est pas en cours d’exécution.

$ sudo ufw allow "OpenSSH"

Activez le pare-feu s’il n’est pas en cours d’exécution.

$ sudo ufw enable

S’il est en cours d’exécution, rechargez-le pour appliquer les modifications.

$ sudo ufw reload

Étape 2 - Installer Docker

Cent OS/Rocky Linux/Alma Linux

Exécutez la commande suivante pour installer Docker.

$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io

Ubuntu

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

Debian

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

Activez et démarrez le service Docker.

$ sudo systemctl start docker --now

Ajoutez votre nom d’utilisateur au groupe Docker.

$ sudo usermod -aG docker $USER

Déconnectez-vous du système et reconnectez-vous pour appliquer le changement.

Étape 3 - Installer Docker Compose

Téléchargez et installez le binaire Docker compose.

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Appliquez les permissions d’exécution au binaire.

$ sudo chmod +x /usr/local/bin/docker-compose

Étape 4 - Créer un fichier Docker Compose

Créez un répertoire pour le gestionnaire de proxy Nginx.

$ mkdir ~/nginx-proxy

Accédez au répertoire.

$ cd ~/nginx-proxy

Créez des répertoires pour les données utilisateur et les certificats SSL.

$ mkdir {data,letsencrypt}

Créez et ouvrez le fichier docker-compose.yml pour l’édition.

$ nano docker-compose.yml

Collez le code suivant dedans.

version: "3"
services:
  npm-app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm-app
    restart: unless-stopped
    ports:
      - '80:80' # Port HTTP public
      - '443:443' # Port HTTPS public
      - '81:81' # Port Web Admin
      # Ajoutez tout autre port de flux que vous souhaitez exposer
      # - '21:21' # FTP
    environment:
      DB_MYSQL_HOST: "npm-db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm"
      DB_MYSQL_NAME: "npm"
      # Décommentez la ligne ci-dessous si IPv6 n'est pas activé sur votre hôte
      # DISABLE_IPV6: 'true'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - npm-db
    networks:
      - npm-nw
      - npm-internal

  npm-db:
    image: 'mariadb:latest'
    container_name: npm-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
    volumes:
      - ./data/mysql:/var/lib/mysql
    networks:
      - npm-internal

networks:
  npm-internal:
  npm-nw:
    external: true

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Passons en revue le fichier. La première partie du fichier est où nous importons l’image du gestionnaire de proxy Nginx et définissons certaines variables d’environnement sous forme de références de base de données. Nous exposons également les ports 80, 81 et 443 au serveur pour l’accès. Vous pouvez exposer plus de ports, comme 21, pour l’accès FTP. Vous pouvez désactiver le support IPV6 en décommentant la ligne DISABLE_IPV6: 'true'. Nous avons mappé plusieurs répertoires de notre hôte vers Docker pour le stockage des données et SQL.

Nous utilisons ici deux réseaux. L’un est le réseau interne npm-internal pour connecter le gestionnaire de proxy et la base de données. Celui-ci est optionnel car il est créé automatiquement. Mais ici, nous le faisons manuellement en lui donnant un nom de notre choix.

Nous avons ajouté un réseau externe au conteneur du gestionnaire de proxy appelé npm-nw. Ce réseau est essentiel car vous pouvez l’utiliser pour connecter le gestionnaire de proxy à tout autre conteneur Docker que vous installez. Utiliser un réseau vous permettra de connecter n’importe quel conteneur directement sans avoir besoin d’exposer ses ports au serveur.

Étape 5 - Exécuter Nginx Proxy Manager

Avant de lancer le conteneur Docker, nous devons créer le réseau externe npm-nw. Les réseaux internes sont créés automatiquement. Exécutez la commande suivante pour créer le réseau externe.

$ docker network create npm-nw

Lancez le conteneur Docker en utilisant la commande suivante.

$ docker-compose up -d

Vérifiez l’état des conteneurs.

$ docker ps
CONTAINER ID   IMAGE                             COMMAND                  CREATED              STATUS              PORTS                                                                                  NAMES
c91ca0ddca97   jc21/nginx-proxy-manager:latest   "/init"                  About a minute ago   Up About a minute   0.0.0.0:80-81->80-81/tcp, :::80-81->80-81/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   npm-app
1738d71b95da   mariadb:latest                    "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp                                                                               npm-db

Étape 6 - Accéder à Nginx Proxy Manager

Vous pouvez maintenant accéder à votre gestionnaire de proxy Nginx via l’URL http://yourserverIP:81. Vous devriez obtenir l’écran de connexion suivant.

Écran de connexion Nginx Proxy Manager

Entrez les identifiants par défaut suivants pour vous connecter.

Adresse e-mail : [email protected] Mot de passe : changeme

Ensuite, vous serez immédiatement invité à définir un nom et une adresse e-mail.

Popup de modification d'utilisateur Nginx Proxy Manager

Cliquez sur le bouton Enregistrer, et vous serez invité à définir un nouveau mot de passe.

Popup de définition de mot de passe Nginx Proxy Manager

Cliquez à nouveau sur le bouton Enregistrer, et vous pouvez maintenant commencer à utiliser l’application.

Tableau de bord Nginx Proxy Manager

Si vous ouvrez l’URL http://yourserverIP dans votre navigateur, vous serez dirigé vers une page par défaut que le gestionnaire de proxy a définie.

Site par défaut Nginx Proxy Manager

Étape 7 - Configuration du nom de domaine et SSL pour Nginx Proxy Manager

Configurons un nom de domaine pour accéder à Nginx Proxy Manager. Cette étape est optionnelle mais est utile si vous souhaitez mettre l’application derrière SSL.

Cliquez sur Hôtes >> Hôtes Proxy dans le menu du tableau de bord pour ouvrir la page des Hôtes Proxy. À partir de là, cliquez sur le bouton Ajouter un hôte proxy pour continuer.

Écran de nouvel hôte proxy Nginx Proxy Manager

Ajoutez le nom FQDN ( npm.example.com) et cliquez dessus. Entrez l’adresse IP de votre serveur et 81 comme Port de transfert.

Passez à l’onglet SSL.

Configurer SSL Nginx Proxy Manager

Sélectionnez Demander un nouveau certificat SSL dans le menu déroulant. Sélectionnez les options Forcer SSL et Support HTTP/2. Si vous souhaitez activer HSTS, vous pouvez également l’activer. Si vous avez configuré votre domaine via Cloudflare, ne sélectionnez pas l’option Forcer SSL, sinon vous serez coincé dans une boucle de redirection.

Entrez votre adresse e-mail, acceptez les conditions d’utilisation de Let’s Encrypt (TOS) et cliquez sur le bouton Enregistrer pour terminer.

Liste des hôtes proxy Nginx Proxy Manager

Votre domaine devrait être en ligne et fonctionner. Essayez d’ouvrir https://npm.example.com dans votre navigateur, et vous devriez obtenir l’écran de connexion de Nginx Proxy Manager.

Vous pouvez faire de même pour la page d’accueil par défaut et l’assigner à un nom de domaine comme https://example.com. Il suffit de changer le port de 81 à 81 lors de la configuration de l’hôte proxy.

Étape 8 - Utiliser Nginx Proxy Manager avec une autre application web Docker

Maintenant que nous avons installé le gestionnaire de proxy, il est temps de l’utiliser. La première chose que nous allons faire est de l’utiliser pour héberger une autre application web Docker. Pour cela, nous allons installer le blog Ghost. Si vous souhaitez en savoir plus, consultez notre tutoriel sur l’installation de Ghost en utilisant Docker sur un serveur Ubuntu.

Créez un autre répertoire pour votre blog Ghost.

$ mkdir ~/ghost

Accédez au répertoire Ghost.

$ cd ~/ghost

Créez deux répertoires pour le contenu et la base de données.

$ mkdir {content,mysql}

Même si vous utilisez la même image MySQL, vous devez garder les données et leurs conteneurs séparés de ceux du gestionnaire de proxy. Cela aidera à isoler tout problème que vous pourriez rencontrer et vous permettra de déplacer des éléments si nécessaire.

Créez et ouvrez le fichier Docker compose pour l’édition.

$ nano docker-compose.yml

Collez le code suivant. Remplacez example.com par votre nom de domaine réel pour votre blog Ghost. Entrez les détails SMTP si vous souhaitez recevoir des e-mails. Vous pouvez les supprimer si vous n’en avez pas besoin.

version: '3.3'
services:

  ghost-app:
    image: ghost:latest
    container_name: ghost-app
    restart: always
    depends_on:
      - ghost-db
    environment:
      url: https://ghost.example.com
      database__client: mysql
      database__connection__host: ghost-db
      database__connection__user: ghost
      database__connection__password: ghostdbpass
      database__connection__database: ghostdb
      mail__transport: SMTP
      mail__options__host: {Votre hôte de service de messagerie}
      mail__options__port: {Votre port de service de messagerie}
      mail__options__secureConnection: {true/false}
      mail__options__service: {Votre service de messagerie}
      mail__options__auth__user: {Votre nom d'utilisateur}
      mail__options__auth__pass: {Votre mot de passe}
    volumes:
      - /home//ghost/content:/var/lib/ghost/content
    networks:
      - npm-nw
      - ghost-network

  ghost-db:
    image: mariadb:latest
    container_name: ghost-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_mysql_root_password
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghostdbpass
      MYSQL_DATABASE: ghostdb
    volumes:
      - /home//ghost/mysql:/var/lib/mysql
    networks:
      - ghost-network

networks:
  ghost-network:
  npm-nw: 
    external: true

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Comme vous pouvez le voir, nous avons connecté le conteneur Ghost avec le gestionnaire de proxy Nginx en utilisant le réseau externe npm-nw. De cette façon, nous n’exposons pas les ports de Ghost au système. Nous avons également utilisé un réseau interne ghost-network pour connecter notre application Ghost et le conteneur de base de données correspondant.

Démarrez le conteneur.

$ docker-compose up -d

Configurer Ghost dans Nginx Proxy Manager

Maintenant, nous devons définir le proxy inverse pour notre installation de Ghost. Ouvrez le gestionnaire de proxy Nginx dans votre navigateur, allez à Tableau de bord >> Hôtes >> Hôte Proxy, et ajoutez un nouvel hôte proxy.

Configurer le blog Ghost Nginx Proxy Manager

Ajoutez le nom de domaine que vous avez choisi pour votre blog Ghost. Pour la valeur Nom d’hôte/IP, entrez le nom de votre conteneur. Dans ce cas, ce serait ghost-app. Nous ne pouvons pas ajouter l’adresse IP ici car nous n’avons pas exposé le port de Ghost au serveur, et le proxy Nginx ne pourra pas atteindre Ghost via l’IP. Par conséquent, nous utilisons le nom du conteneur, auquel NPM peut accéder en utilisant le réseau Docker npm-nw, que nous avons créé. Utilisez 2368 comme port, le port par défaut utilisé par le blog Ghost. Vérifiez les autres options comme indiqué dans la capture d’écran ci-dessus.

Ensuite, passez à l’onglet SSL et créez un nouveau certificat SSL en suivant l’étape 6. Comme vous allez télécharger du contenu sur votre blog Ghost, il serait bon de définir une taille maximale de téléchargement pour vos téléchargements.

Heureusement, NPM vous permet d’ajouter des configurations personnalisées. Passez à l’onglet Avancé et entrez client_max_body_size 50m; dans la boîte.

Configuration avancée NPM blog Ghost

Cliquez sur le bouton Enregistrer pour terminer l’ajout de l’hôte proxy. Vous devriez pouvoir accéder à votre blog Ghost via l’URL https://ghost.exampl.com

Page d'accueil du blog Ghost

Étape 9 - Utiliser Nginx Proxy Manager comme service de redirection

Voyons comment vous pouvez utiliser NPM pour rediriger facilement un domaine vers un autre. Pour ce faire, visitez Tableau de bord >> Hôtes >> Hôtes de redirection. À partir de là, cliquez sur le bouton Ajouter un hôte de redirection pour commencer.

Hôte de redirection Nginx Proxy Manager

Entrez le nom de domaine que vous souhaitez transférer. Et entrez le domaine de transfert. Le domaine de transfert doit déjà être configuré. Laissez le schéma sur auto. En fonction de votre besoin, vous pouvez choisir http ou https. Sélectionnez le bon Code HTTP et cochez les options Préserver le chemin et Bloquer les exploits courants. Si vous utilisez un schéma auto ou https, assurez-vous d’avoir sélectionné ou créé un certificat SSL en utilisant NPM. Cliquez sur Enregistrer pour terminer l’ajout de votre hôte de redirection.

Votre domaine example.com devrait commencer à rediriger vers blog.example.com.

Autres utilisations de Nginx Proxy Manager

Il existe deux autres façons d’utiliser Nginx Proxy Manager. Vous pouvez l’utiliser comme un hôte 404, ce qui signifie que vous pouvez utiliser un domaine comme page d’atterrissage pour montrer aux moteurs de recherche que les pages de domaine n’existent pas. L’étape consiste simplement à entrer un domaine et à configurer SSL pour celui-ci. Vous pouvez également utiliser cela comme une opportunité pour suivre les journaux pour le nom de domaine et voir le trafic référent.

L’autre fonctionnalité est d’utiliser NPM comme hôte de flux. Vous pouvez utiliser cette fonctionnalité pour transférer des ports TCP/UDP vers un autre ordinateur sur le réseau. Cela est utile si vous hébergez des serveurs de jeux. La seule chose qu’il nécessite est que vous saisissiez le port entrant, le domaine ou l’adresse IP de transfert, le port de transfert et sélectionniez le type de port.

Popup de nouvel hôte de flux Nginx Proxy Manager

Utiliser Nginx Proxy Manager pour héberger un site web statique

Nginx Proxy Manager peut également héberger des sites web simples statiques ou dynamiques. Pour ce faire, ajoutez un nouvel hôte proxy et choisissez 127.0.0.1 comme Domaine de transfert et 80 comme port.

Hôte de site web statique Nginx Proxy Manager

Sous l’onglet Avancé, entrez la configuration spécifiant le répertoire racine. Assurez-vous que le répertoire racine pour le site est monté dans la configuration Docker compose initiale. Ici, nous utilisons le répertoire /data/static pour héberger notre site web statique.

Configuration avancée du site statique Nginx Proxy Manager

Cliquez sur Enregistrer pour terminer, et votre site devrait être accessible. Vous pouvez de même héberger tout type de site en utilisant le gestionnaire de proxy.

Page de démonstration du site statique

Étape 10 - Fonctionnalités diverses

Utiliser la fonctionnalité de contrôle d’accès de Nginx Proxy Manager

Vous pouvez utiliser la fonctionnalité de listes d’accès de NPM pour activer l’authentification HTTP ou bloquer des plages d’IP. Ouvrez NPM et visitez la page Tableau de bord >> Listes d’accès.

Cliquez sur le bouton Ajouter une liste d’accès pour commencer.

Nouvelle liste d'accès Nginx Proxy Manager

Vous pouvez nommer votre configuration de liste d’accès (ACL). L’onglet Satisfaire n’importe lequel si coché, permettra l’accès si le client remplit l’une des conditions spécifiées. Si un client passe l’authentification HTTP mais peut échouer l’accès basé sur l’IP, il sera autorisé. Mais si l’option Satisfaire n’importe lequel est décochée, le client devra remplir toutes les conditions.

La fonctionnalité Passer l’authentification à l’hôte transmettra la fonctionnalité d’authentification au serveur hôte.

Ensuite, passez à l’onglet Autorisation. Ici, vous pouvez créer un nom d’utilisateur et un mot de passe pour la méthode d’authentification HTTP. Pour ajouter plus d’un utilisateur, cliquez sur le bouton Ajouter. Vous ne pouvez ajouter que jusqu’à 5 utilisateurs. Et il y a un bug avec le bouton Ajouter, donc utilisez d’abord le bouton puis remplissez les détails. Si vous remplissez les détails et cliquez sur le bouton plus tard pour ajouter un autre utilisateur, cela effacera les données de l’utilisateur précédent.

Paramètre d'autorisation Nginx Proxy Manager

Passez à l’onglet Accès. Ici, vous pouvez définir quelles adresses IP doivent être autorisées ou refusées.

Onglet d'accès IP Nginx Proxy Manager

Cliquez sur Enregistrer pour terminer.

Pour utiliser cette liste d’accès, vous devez la sélectionner lors de l’ajout de votre hôte proxy. Comme dans l’exemple pour le blog Ghost ci-dessous, nous avons sélectionné notre liste d’accès.

Support de liste d'accès proxy Nginx Proxy Manager

Activer le support pour plus de noms de domaine

À mesure que le nombre d’hôtes et de domaines augmente, votre Nginx peut manquer d’espace de hachage ou rencontrer des problèmes de mémoire. Nous pouvons ajouter une configuration personnalisée qui s’appliquera à tous les hôtes pour résoudre ce problème.

Pour ce faire, créez le répertoire custom à l’intérieur de ~/nginx-proxy/data/nginx.

$ sudo mkdir ~/nginx-proxy/data/nginx/custom

Créez et ouvrez le fichier http.conf à l’intérieur de ce répertoire.

$ sudo nano ~/nginx-proxy/data/nginx/custom/http.conf

Collez les lignes suivantes dedans.

proxy_headers_hash_max_size 1024;
proxy_headers_hash_bucket_size 128;

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Nginx devrait accepter automatiquement ces valeurs. Si cela ne se produit pas, vous pouvez redémarrer le conteneur NPM en utilisant la commande suivante.

$ docker restart npm-app

Rediriger la page d’accueil par défaut

À l’étape 6, vous voyez la page par défaut lorsque vous tapez l’URL http://. Si vous souhaitez changer cela, il est possible de le faire. Pour cela, visitez la Page des paramètres. Cliquez sur les trois points sur le côté droit et cliquez sur le bouton Modifier.

Édition de la page d'accueil Nginx Proxy Manager

Vous pouvez définir la page d’accueil pour agir comme une page 404, une page de redirection ou ajouter du HTML personnalisé en utilisant l’option Page personnalisée. Si vous sélectionnez Rediriger, vous devrez spécifier l’URL cible.

Paramètres du site par défaut Nginx Proxy Manager

Voici le HTML personnalisé que nous avons utilisé à cette fin.



  
    Rien ici
    
    
    
    
  
  
    

Oups!

Désolé pour le désagrément, mais vous n'êtes pas censé être ici. Vous ne trouverez rien ici. Cette page a été définie pour le guide Nginx Proxy Manager de HowtoForge. Peut-être qu'un jour, elle montrera quelque chose.

Cliquez sur Enregistrer pour terminer. Votre page d’accueil devrait être changée en quelque chose comme ci-dessous.

Page d'accueil personnalisée Nginx Proxy Manager

Étape 11 - Mettre à jour Nginx Proxy Manager

Pour mettre à jour NPM, arrêtez d’abord les conteneurs.

$ cd ~/nginx-proxy
$ docker-compose down --remove-orphans

Tirez les dernières images.

$ docker-compose pull

Démarrez à nouveau les conteneurs.

$ docker-compose up -d

Conclusion

Cela conclut notre tutoriel où vous avez installé Nginx Proxy Manager et appris à l’utiliser pour ajouter un hôte proxy pour un autre conteneur docker, l’utiliser comme service de redirection et contrôler l’accès en l’utilisant. Si vous avez des questions, posez-les dans les commentaires ci-dessous.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.