Tous les services opérationnels Devise EUR Aucun frais de mise en service Vous êtes à La Réunion ?
‹ Guides pour choisir

Reverse proxy : définition et utilité

Un reverse proxy, ou proxy inverse, est un serveur placé devant une ou plusieurs applications. Il reçoit les requêtes venues d'Internet et les transmet au bon service, sur la même machine ou ailleurs, puis renvoie la réponse au visiteur. Le visiteur ne parle qu'à lui. C'est ce qui permet de servir plusieurs sites sur un même serveur, de poser le certificat HTTPS à un seul endroit et de ne jamais exposer directement les applications.

Par Jonathan Dewaele · publié le

Proxy direct et proxy inverse

Le glossaire de MDN distingue deux familles :

  • le proxy direct gère les demandes depuis et vers n'importe où sur Internet, pour le compte de ceux qui passent par lui ;
  • le proxy inverse prend des requêtes d'Internet et les transmet aux serveurs d'un réseau interne.

Le premier protège et filtre ceux qui naviguent. Le second protège et organise ceux qui publient.

À quoi sert un reverse proxy

  1. Servir plusieurs applications sur les mêmes ports. Un serveur n'a qu'un port 443. Le reverse proxy lit le nom demandé (app.exemple.fr, outils.exemple.fr) et envoie chaque visite vers la bonne application, qui écoute sur un port interne.
  2. Porter le HTTPS. Le certificat est posé et renouvelé sur le reverse proxy ; les applications derrière n'ont pas à s'en occuper.
  3. Cacher les applications. Seul le reverse proxy est joignable depuis Internet. Une base de données ou une interface d'administration restent sur le réseau interne.
  4. Répartir la charge. Le même service peut tourner en plusieurs exemplaires, et le reverse proxy distribue les requêtes entre eux.
  5. Ajouter des règles : redirections, en-têtes de sécurité, cache, limitation du nombre de requêtes.

Comment il transmet la requête

Avec nginx, par exemple, la directive proxy_pass indique l'adresse du service à joindre, selon la documentation du module proxy de nginx :

location / {
    proxy_pass       http://localhost:8000;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
}

L'application derrière voit arriver la requête du reverse proxy, pas celle du visiteur. Pour connaître la vraie adresse du visiteur, elle lit des en-têtes comme X-Real-IP ou X-Forwarded-For. MDN prévient que ces en-têtes peuvent être falsifiés s'ils ne sont pas posés par un proxy de confiance : une application ne doit s'y fier que si elle n'est joignable qu'à travers lui.

Les outils les plus courants

OutilCe qui le caractérise
nginxserveur web et reverse proxy, réglé par fichiers
Caddyobtient et renouvelle seul les certificats HTTPS
Traefikse règle par les étiquettes des conteneurs Docker
Nginx Proxy Managerune interface web au-dessus de nginx

Sur un VPS qui fait tourner des conteneurs, Traefik et Nginx Proxy Manager sont les choix les plus fréquents : voir Traefik et Nginx Proxy Manager. Pour un certificat avec Caddy, voir Un certificat SSL sur son VPS.

Chez Hubspace

Vous en croisez déjà sans le savoir. Sur nos hébergements, nginx est placé devant Apache : il reçoit les visites et les transmet au serveur qui exécute PHP. Cloudflare, quand il est placé devant un site, joue lui aussi ce rôle à l'échelle d'Internet : voir Qu'est-ce que Cloudflare.

Sur nos VPS, le pare-feu n'ouvre que les ports 22, 80 et 443. Un reverse proxy est donc la façon naturelle de publier plusieurs applications Docker : lui seul écoute sur 80 et 443, et les applications restent fermées sur leurs ports internes. Les serveurs sont présentés sur la page des serveurs VPS.

Questions fréquentes

Un reverse proxy ralentit-il le site ?

Il ajoute une étape, mais elle se compte en millisecondes sur la même machine. Bien réglé, il peut même accélérer le site, en gardant en cache des réponses ou en compressant les pages.

Faut-il un reverse proxy pour une seule application ?

Ce n'est pas obligatoire, mais il reste utile pour porter le certificat HTTPS et ne pas exposer l'application directement. Sur un serveur où seuls 80 et 443 sont ouverts, c'est le moyen le plus simple de la rendre joignable.

Reverse proxy et load balancer, est-ce pareil ?

Un répartiteur de charge est un reverse proxy dont le rôle principal est de distribuer les requêtes entre plusieurs exemplaires d'un service. Beaucoup de reverse proxy savent le faire, nginx compris quand un nom correspond à plusieurs adresses.

Articles liés