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.compointant 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.

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.

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

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

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.

É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.

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.

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.

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.

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.

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

É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.

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.

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.

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.

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.

É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.

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.

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

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.

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.

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.

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.

É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.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.