Configurer votre reverse proxy avec Nginx et Docker

Ronan MOREL
05/02/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 GitHub 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 :

192.168.1.14 test.bzh
192.168.1.14 demo1.test.bzh
192.168.1.14 demo2.test.bzh
192.168.1.14 demo3.test.bzh

Lancement des conteneurs

En utilisant Docker & docker-compose, placer 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 suivantes comme ceci :

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

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 chemin relative)

  • 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

Proxy inverse
Un proxy inverse ( reverse proxy ) est un type de serveur, habituellement placé en frontal de serveurs web…

Docker Documentation
Try our multi-part walkthrough that covers writing your first app, data storage, networking, and swarms, and ends with…

NGINX | High Performance Load Balancer, Web Server, & Reverse Proxy
NGINX accelerates content and application delivery, improves security, facilitates availability and scalability for the…

Welcome! - The Apache HTTP Server Project
The Apache HTTP Server Project is an effort to develop and maintain an open-source HTTP server for modern operating…

Traefik
Traefik is an open-source Edge Router that makes publishing your services a fun and easy experience. It receives…

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

Slickteam/reverse-proxy-sample
Contribute to Slickteam/reverse-proxy-sample development by creating an account on GitHub.github.com