Sommaire
🐧 Module L14 – Le reverse-proxy
Objectifs : comprendre le rôle d’un reverse-proxy, ses avantages, et savoir le mettre en œuvre avec Nginx.
📖 Introduction
Un reverse-proxy (ou proxy inverse) est un serveur qui se place devant un ou plusieurs serveurs web. Il reçoit les requêtes des clients, les achemine vers le serveur approprié, puis renvoie la réponse. Il est utilisé pour la répartition de charge, la sécurité, la mise en cache, le SSL/TLS termination et la publication de plusieurs applications sur un même port.
À l'issue de ce module, vous serez capable de :
- Expliquer le rôle d'un reverse-proxy.
- Configurer Nginx en tant que reverse-proxy.
- Mettre en place la terminaison SSL.
- Comprendre la répartition de charge (load balancing).
🔍 Qu'est-ce qu'un reverse-proxy ?
Contrairement au proxy direct (côté client), le reverse-proxy est côté serveur. Il agit comme une porte d'entrée unique vers les applications internes.
- Load balancing : distribuer les requêtes entre plusieurs serveurs.
- SSL/TLS termination : décharger le chiffrement/déchiffrement.
- Cache : servir des contenus statiques sans solliciter le serveur applicatif.
- Filtrage : bloquer les requêtes malveillantes.
- Publication unifiée : plusieurs applications sur le même domaine/port (ex : /app1, /app2).
📐 Comparaison proxy direct vs reverse-proxy
| Critère | Proxy direct | Reverse-proxy |
|---|---|---|
| Position | Du côté client | Du côté serveur |
| But principal | Contrôle des accès sortants, anonymat | Protection, répartition, performance |
| Configuration côté client | Nécessaire (navigateur) | Aucune (transparent) |
| Exemple | Squid | Nginx, HAProxy |
🛠️ Mise en pratique avec Nginx
Installation de Nginx
sudo apt update && sudo apt install nginx -y
Configuration d'un reverse-proxy simple
Proxy vers un serveur interne sur le port 8080
# /etc/nginx/sites-available/default
server {
listen 80;
server_name mon-domaine.fr;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
proxy_pass: définit le serveur cible.proxy_set_header: transmet l'IP réelle du client.
Répartition de charge (load balancing)
upstream backend {
server 10.0.0.2:8080;
server 10.0.0.3:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
Terminaison SSL
server {
listen 443 ssl;
ssl_certificate /etc/ssl/certs/mon-cert.pem;
ssl_certificate_key /etc/ssl/private/mon-cert.key;
location / {
proxy_pass http://localhost:8080;
}
}
📝 Exercices d'application
Exercice 1 – Reverse-proxy
Quel est l'avantage principal d'un reverse-proxy en entreprise ?
Il permet de centraliser l'accès, de répartir la charge, de sécuriser les serveurs internes et de gérer le SSL de manière centralisée.
Exercice 2 – Configuration
Écrire la directive Nginx pour proxy vers http://10.0.0.5:3000.
proxy_pass http://10.0.0.5:3000;
🎯 Quiz d'auto‑évaluation
1. Un reverse-proxy se place du côté client.
2. Nginx peut être utilisé comme reverse-proxy.
3. La directive proxy_pass indique le serveur cible.
4. La terminaison SSL permet de décharger le serveur applicatif du chiffrement.
5. Un reverse-proxy peut faire du load balancing.