Nginx-Proxy-Manager : reverse proxy Nginx + SSL via interface Web [NOOB]

nginx 16 sept. 2018

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 :)

Mots clés