Docker nécessite souvent, pour faire propre et simple, d’utiliser une solution globale de reverse proxy. Ces dernières utilisant plutôt Nginx qu’Apache.
La solution la plus connue est sans doute Traefik, que j’ai utilisé après longtemps avoir fait tourner le couple JWilder/Nginx-proxy & JrCs/letsencrypt-nginx-proxy-companion pour la partie Lets Encrypt.
Nginx-Poxy-Manager de jc21 est un petit nouveau sur le marché. Avec un peu de recul, et pour une utilisation basique de Docker, je le trouve plus simple que les autres solutions. Enfin du moins plus abordable notamment du fait de son interface graphique qui permet de créer des reverses, avec ou sans SSL (Lets Encrypts, perso, autre) et d’ajouter des paramètres Nginx (par exemple l’authentification).

L’installation est simple et peut se faire via un docker-compose.yml. Il nécessite une base de données SQL, dans mon exemple je prend MariaDB.
version: "3"
services:
app:
image: jc21/nginx-proxy-manager:2
restart: always
container_name : nginx-proxy-manager
ports:
- 80:80
- 81:81
- 443:443
volumes:
- /home/aerya/docker/nginx-proxy-manager/config.json:/app/config/production.json
- /home/aerya/docker/nginx-proxy-manager/data:/data
- /home/aerya/docker/nginx-proxy-manager/letsencrypt:/etc/letsencrypt
depends_on:
- db
db:
image: mariadb
restart: always
container_name : mariadb
environment:
MYSQL_ROOT_PASSWORD: "unmotdepassedelamortquitue"
MYSQL_DATABASE: "nginxproxymanagertest"
MYSQL_USER: "nginxproxymanagertestinguser"
MYSQL_PASSWORD: "unautremotdepassedelamortquitue"
volumes:
- /home/aerya/docker/mariadb/data/mysql:/var/lib/mysql
Et il faudra aussi compléter son fichier de configuration
/home/aerya/docker/nginx-proxy-manager/config.json
{
"database": {
"engine": "mysql",
"host": "mariadb",
"name": "nginxproxymanagertest",
"user": "nginxproxymanagertestinguser",
"password": "unautremotdepassedelamortquitue",
"port": 3306
}
}
Bien évidemment pour chaque container Docker qu’on souhaite utiliser via un reverse-proxy il convient de créer un domaine ou sous-domaine adéquate chez son gestionnaire de domaines. Le plus courant étant de créer un sous-domaine du genre « Plex » vers l’IP de son serveur.
EDIT 06/02/19 : le projet continue dévoluer et gère maintenant le HTTP/2 ainsi que les redirections SSL.

EDIT 21/02/19 : ajout de HSTS pour domaine et sous-domaines

L’ajout d’un reverse se fait en quelques clics : Add Proxy Host, entrez votre sous-domaine, le port configuré dans votre Docker, si vous voulez un SSL et, éventuellement, une authentification Nginx. Bien évidemment pas d’auth avec Plex, c’est qu’un exemple…



Pour pouvoir ajouter une authentification vous devez créer le fichier indiqué dans les paramètres : /data/htpassword/plex.upandclear.org
Le /data correspond à /home/aerya/docker/nginx-proxy-manager/data:/data, comme nous l’avons vu (ou pas !) dans le docker-compose.yml du début.
Du coup pour créer votre utilisateur:mot_de_passe (chiffré) vous pouvez vous servir de ce site. Il convient enfin d’écrire ces infos dans un fichier « plex.upandclear.org » dans /home/aerya/docker/nginx-proxy-manager/data
Voilà, je n’ai pas trouvé plus accessible pour ceux qui ne sont pas à l’aise sur Linux :)
C’est un super projet, merci pour la découverte !
Bonjour, je pense qu’il y à une coquille dans ton tuto.
« Et il faudra aussi compléter son fichier de configuration
/home/aerya/docker/nginx-proxy-manager/PRODUCTION.SON »
Je pense que le fichier a créer c’est config.json et non pas production.json
;)
Oups, corrigé :) Merci
De rien =)
Merci pour la découverte !
Bonsoir, après plusieurs jours de test j’ai trouvé ce petit programme fort sympathique. Cependant je ne suis pas très doué avec nginx et je cherchais à faire en sorte que mes application ne soit pas disponible sur ipduserver:5000 par exemple. N’y a-t-il pas une ligne à rajouté dans les paramètre sur nginx pour rendre les application inaccessible via numéro de… Lire la suite »
Si tu ne publies (80:80, 82:80 etc) aucun port lorsque tu lances tes containers Docker alors rien ne sera accessible autrement que via domaine et/ou sous-domaines.
Merci de ta réponse, mais en utilisant le tuto, on fait bien de la redirection d’un port vers un ndd. Et donc si je ne publie pas de port, comment je lie mes applications, à mon ndd.
Le port est ouvert, le container est fait comme ça. Donc sur le réseau Docker il est bien présent. Par exemple, ton container Nginx gérant Lets Encrypt et les sous-domaines étant sur le même réseau que tes containers, il va le voir et pouvoir rediriger.
C’est juste que tu ne le rends pas accessible publiquement.
Salut Aerya faut-il installer nginx et mariadb et php le fichier de configuration est à placer dans /home/aerya/docker/nginx-proxy-manager/config.json donc dans le config.json si je comprend bien
car quand je vais sur mon ip sa me dis You’ve successfully started the Nginx Proxy Manager mais quand je vais sur mon ip :81 page blanche
Salut lolo,
Le docker-compose installe tout ce qu’il faut à savoir le docker du reverse nginx et celui de la base de données mariadb. En effet le config.json à placer est celui qu’il faut remplir avec les user:pwd que tu as définis avant. Ensuite faut tout relancer pour que le reverse prenne en compte ce fameux config.json.
Merci Aerya, ça fonctionne super , si je veux installer wordpress à la racine de mon nom de domaine il faut que j’installe nginx pour avoir le www dans var ou alors ça se passe autrement car installer un site wordpress avec nginx je sais faire mais avec Nginx-Proxy-Manager je sais pas si ça se passe autrement encore une question… Lire la suite »
J’ai pas testé d’installation à la main ensuite, je ne suis qu’en Docker, y compris pour WordPress. Je ne sais pas si le mettre dans le /www lié à ton docker du reverse sera fonctionnel (en théorie oui). Pour Adminer, je n’utilise pas de compose mais un simple docker run -d –link mariadb:db -p 9898:8080 adminer. Pour le compose il… Lire la suite »
Merci Aerya, j’ai commencé à tout installé en docker aussi Nginx Poxy Manager fonctionne plutôt bien à part avec wordpress une erreur s’affiche pour le faire passer avec ssl , en http pas de souci ,aussi si je veux pas que les ports s’affiche derriere mon wordpress il faut que je fais un redirection hosts avec juste mon nom de… Lire la suite »
Salut, j’ai une IPv4/v6 dédiée pour mon blog donc je ne rencontre pas ce problème. Peut-être que tu peux faire de même en attribuant une IP statique (interne) ? https://docs.docker.com/compose/compose-file/compose-file-v2/#ipv4_address-ipv6_address Pour Nextcloud voici mon compose Owncloud si ça peut t’aider : docker run -d \ --name owncloud \ --restart always \ --link mariadb:db \ --link redis:redis \ -e OWNCLOUD_DOMAIN=cloud.***.*** \… Lire la suite »
Merci Aerya
d’avoir pris le temps de répondre 👍
Bonjour aerya j’essaie d’installer ceci mais sans sucés dois je lancer le docker compose avant de faire le config.json pour éditer le config.json sous débian c’est bien la commande « nano » je suis un peu perdu.
Salut, nano est un éditeur simple pour Linux en CLI en effet. Comme répondu sur Mondedie je te recommande de créer ton fichier config.json avant de lancer ton docker-compose up -d.
Salut Aerya. Tout d’abord, merci pour la découverte. J’adore tes tutos, toujours aussi clairs et instructifs. Malgré tout, je n’arrive pas à faire fonctionner ce p*** de reverse proxy. Je ne pense pas que ce soit celui-ci particulièrement car j’ai pas réussi à faire fonctionner non plus Traefik mdr. Je dois rater un truc, mais je ne vois pas quoi.… Lire la suite »
Salut, tu peux me montrer comment tu lances ton Docker stp ? (masque des infos si besoin)
Et via le port HTTPS, ça ne fonctionne pas non plus ?
Et si tu change les ports de config ? Par exemple
ports:
– 2017:80
– 2018:81
– 2019:443
Du coup, je suis passé directement sur mon ptit serveur … après tout, ce n’est que du Docker, je risque pas de tout casser (et j’ai pris un snapshot lol). Alors, pour le port 80, j’ai une belle page : Congratulations! You’ve successfully started the Nginx Proxy Manager. If you’re seeing this site then you’re trying to access a host… Lire la suite »
[9/21/2019] [5:07:33 PM] [Global ] › ✖ error connect ETIMEDOUT Faudrait voir les logs du Docker concerné (ou globaux), y’a un pépin. Le port 443 ne serait pas déjà utilisé ? Tu as bien changé les ports de ton Docker comme j’ai mis plus haut ? Par exemple au lieu de 443:443 tu mets 2019:443. Le port local de ton… Lire la suite »
Merci pour ton aide Aerya. J’ai réussi à le faire fonctionner en modifiant le config.json. Dans la partie « host », j’ai dû mettre directement l’adresse du conteneur de la BDD fournit par le bridge Docker (en 172.17.x.x). Il semble que le nom d’hôte ne soit pas résolu, mais je ne sais pas encore pourquoi… J’ai cette ligne dans les logs du… Lire la suite »
Le nom d’hôte est peut-être local simplement ? Ou derrière un routeur qui bloque l’accès direct au port ?
Bonjour, J’ai suivi ce tuto super sympa, mais j’ai un soucis. Si je désactive tout ce qui est lié à https (le « scheme » et le certificat fraichement généré), j’arrive bien sur ma page en http (donc mon container fonctionne bien). Dès que je repasse en https et avec le certificat, j’ai un bon ERR_CONNECTION_REFUSED sur mon domaine en https. Côté… Lire la suite »
Hello, j’utilise actuellement le couple nginx-proxy avec le companion letsencrypt. Le souci que je rencontre est que je ne peux pas modifier le fichier de conf de nginx. Donc, je ne peux pas rajouter une entrée correspondante à une autre machine de mon réseau, je suis cantonné aux containers hébergés sur la même machine. De ce que je comprends, nginx-proxy-manager… Lire la suite »
Salut, là en effet tu peux ajouter des paramètres à la configuration Nginx pour chaque proxy. En revanche je n’ai pas testé de reverse « déporté ». Je suppose que c’est possible en LAN via proxy_pass.
Hello,
je te confirme que tout fonctionne niquel. J’ai donc installé nginx-proxy-manager en container, et je peux rediriger vers d’autres VMs sans souci. Merci pour l’article !
Super, merci de ton retour :)
Hello Aerya J’ai voulu faire quelques chose de propre sur mon serveur maison et la solution nginx proxy est parfaite donc merci pour le tuto :) J’ai une machine sous OpenMediaVault5 sur laquelle j’ai nginx proxy manager d’installer J’ai une autre machine sous debian ou j’ai mes applis d’installé (sickchill,plex,rutorrent+vpn, autre…) J’ai réussi à tout rediriger comme je l’entend sauf…… Lire la suite »
Merci :)
J’ai déjà eu ce genre de souci avec ruTorrent, c’était aléatoire et j’ai jamais vraiment trouvé ce qui clochait (mais RAS depuis un bout de temps). Teste en désactivant Cache Assests et/ou Websocket dans les options du reverse concerné.
Elles sont déjà décochées… là en gros j’ai : domaine name : torrent.mondomaine.com scheme https forward hostname/ip : 192.168.1.ipdemamachine forward port 443 cache assets / block common exploits / websockets support : tous desactivés j’ai demandé un ssl Force SSL activé HTTP/2 support activé HSTS enable désactivé HSTS Subdomaine désactivé . et en custom nginx configuration j’ai ajouté ca pour… Lire la suite »
Là pour le coup j’ai un trop long délai de réponse ^^’
Y’a rien de bizarre dans ton paramétrage. Tu as tenté avec un navigateur en mode privé ? Tu utilises quel Docker ?
En ce moment je tourne avec romancin/rutorrent et mondedie/rutorrent et je ne rencontre aucun souci.
hello et à mon tour de mettre trois plombes à repondre…
J’ai test avec mondedie/rutorrent et ca fonctionne plutot pas mal, sauf que le statut du port reste en « inconnu » et la copie vers avec filemanager se lance mais ne copie rien… ^^
Le statut du port c’est pas grave, ça communique quand même bien. J’ai souvent eu ce souci et aucun impact.
Pour FileManager je regarde ça dimanche ou lundi mais je penche pour un problème de droits sur le dossier cible.
Bonjour à tous Très bon tuto merci à tous J’ai un Microserver Gen8 chez moi avec Proxmox en vue du remplacement de mon NAS Qnap. N’ayant pas d’IP fixe j’ai mis en place via NOIP une redirection qui arrive sur le serveur Nginx-Proxy manager. Je n’arrive pas à installer le HTTPS via letsencrypt. Pour info j’ai mis en place un… Lire la suite »