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.
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.
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 :
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 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 :
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 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
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.
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
Slickteam/reverse-proxy-sample
Contribute to Slickteam/reverse-proxy-sample development by creating an account on GitHub.github.com