Configurer votre reverse proxy avec Nginx et Docker

Ronan Morel
Slickteam
Published in
4 min readFeb 5, 2020

Nous allons voir, dans ce court article, ce qu’est un reverse proxy, comment le configurer et deux manières de mettre en place un reverse proxy.

Reverse Proxy, Quid?

Si je reprends la définition telle qu’elle est dite dans Wikipédia :

Un proxy inverse (reverse proxy) est un type de serveur, habituellement placé en frontal de serveurs web. Contrairement au serveur proxy qui permet à un utilisateur d’accéder au réseau Internet, le proxy inverse permet à un utilisateur d’Internet d’accéder à des serveurs internes. Une des applications courantes du proxy inverse est la répartition de charge (load-balancing).

Pour schématiser ces propos, je vous propose, ci-dessous, une vision d’un reverse proxy :

L’utilisateur veut accéder au service Demo 1, avec le nom de domaine demo1.test.bzh. Ce nom de domaine est attaché à l’adresse IP du reverse proxy et ce dernier va rediriger la demande de l’utilisateur vers le service correspondant.

Remarque : Pour beaucoup de services en ligne, le reverse proxy va être le seul point d’entrée aux autres services, c’est-à-dire sur Internet (réseau public). Les autres étant eux disponibles sur un réseau local lié au reverse proxy.

Jouons avec le reverse proxy

Avec le lien Gitlab disponible en bas de page, nous allons pouvoir, en local sur notre propre PC, configurer notre reverse proxy.

Configuration des DNS locaux

Dans le fichier hosts, disponible dans “/etc/hosts” sur Linux & Mac et “C:/WINDOWS/system32/drivers/etc/hosts” sur Windows, Rajouter les lignes suivantes :

Lancement des conteneurs

En utilisant Docker & docker-compose, placez-vous dans le dossier docker et faites la commande suivante :

docker-compose up -d

Cela va démarrer 4 conteneurs :

  • nginx : le reverse proxy
  • hellonginxdemo: Affiche une page web exemple Nginx
  • httpd: Affiche une page web exemple Apache / CentOS7
  • hello-world-rancher: Affiche une page web exemple Rancher

Reverse proxy avec des sous domaines

Le reverse proxy va rediriger les flux suivants comme ceci :

  • http://test.bzh : Affiche sur une page web par Nginx lui-même
  • http://demo1.test.bzh : Redirige vers le service hellonginxdemo
  • http://demo2.test.bzh : Redirige vers le service httpd
  • http://demo3.test.bzh : Redirige vers le service hello-world-rancher

Cette méthode, d’utiliser les sous-domaines, a ses avantages et inconvénients :

Avantages :

  • Simplicité et séparation des fichiers de configuration sur Nginx
  • Ne nécessite pas une grande compréhension de Nginx et de ses mécanismes

Inconvénients :

  • Avoir la main sur la création de DNS
  • Création de multiples sous-domaines
  • Avoir un certificat HTTPS wildcard (*.test.bzh)
  • Avoir aussi un certificat HTTPS pour test.bzh

Reverse proxy avec un domaine et un chemin

Le reverse proxy va rediriger les flux suivants comme ceci :

  • http://test.bzh : Affiche sur une page web par Nginx lui-même
  • http://test.bzh/demo1 : Redirige vers le service hellonginxdemo
  • http://test.bzh/demo2 : Redirige vers le service httpd
  • http://test.bzh/demo3 : Redirige vers le service hello-world-rancher

Cette méthode, d’utiliser un chemin en plus du nom de domaine, a ses avantages et inconvénients :

Avantages :

  • Un seul nom de domaine à créer
  • Un seul certificat HTTPS (test.bzh)

Inconvénients :

  • Possible problème de base URL dans quelques cas (ex: la navigation en chemins relatifs)
  • Non séparation du fichier de configuration des virtual hosts
  • Nécessite une plus grande compréhension des mécanismes de Nginx
  • Rajoute des configurations spécifiques, soit sur le reverse proxy, soit sur les services derrières le reverse proxy

Conclusion

Vous avez vu, dans cet article, comment mettre en place simplement et rapidement un reverse proxy avec Nginx et Docker. Vous avez aussi deux manières de composer son reverse proxy : avec les sous-domaines ou avec un chemin en plus de d’URL.

À noter qu’il existe d’autres reverse proxy comme Apache (Httpd), qui n’était pas fait pour ça à la base, ou encore Traefik, le nouveau venu.

Sources & liens

Liens Dockerhub :

https://hub.docker.com/_/nginx

https://hub.docker.com/r/centos/httpd-24-centos7

https://hub.docker.com/r/nginxdemos/hello

https://hub.docker.com/r/rancher/hello-world

Code source

--

--

Ronan Morel
Slickteam

DevOps & Full Stack Developper at @SlickteamFR.