Un proxy inverse est un serveur placé devant un ou plusieurs serveurs web qui reçoit les requêtes des clients et les transmet à ces serveurs, de sorte que les clients se connectent au proxy au lieu de l'origine. Il est couramment utilisé pour l'équilibrage de charge, la mise en cache, la terminaison TLS et la sécurité. Tous les autres types de proxy dans ce glossaire sont des proxies directs, qui agissent pour le client. Un proxy inverse agit pour le serveur.

Les proxies inverses sont déployés par l'opérateur du service web lui-même, et non par ceux qui effectuent des requêtes à celui-ci. Nginx, Varnish et Apache HTTP Server peuvent fonctionner comme des proxies inverses, et le CDN de Cloudflare agit comme tel.

Comment fonctionne un proxy inverse

  1. Un client envoie une requête ordinaire à l'adresse du site. Le proxy inverse apparaît au client comme un serveur web normal, donc aucune configuration du client n'est nécessaire.
  2. Le proxy décide quel serveur backend doit traiter la requête et la transmet. La norme HTTP (RFC 9110) appelle cela une passerelle : elle agit comme le serveur d'origine pour le client mais transmet les requêtes entrantes à d'autres serveurs.
  3. Le backend répond, et le proxy renvoie le contenu comme s'il était l'origine. Nginx, par exemple, met en mémoire tampon la réponse complète du backend par défaut avant de l'envoyer.

Proxy inverse vs. Proxy direct

Proxy directProxy inverse
Agit pourLe clientLe serveur
Configuré parL'utilisateur ou l'application clienteL'opérateur du site
Configuration du clientRequiseAucune
CacheL'identité du client des serveursL'identité des serveurs des clients
Utilisations typiquesConfidentialité, scraping web, accès à Internet derrière un pare-feuÉquilibrage de charge, mise en cache, terminaison TLS, accès à des serveurs derrière un pare-feu

Ce que font les proxies inverses

  • Équilibrage de charge : répartir les requêtes sur plusieurs serveurs backend. Nginx utilise par défaut le round-robin et propose également le moins de connexions et le hachage IP, ce qui maintient chaque client sur le même serveur.
  • Failover : Nginx marque un serveur comme défaillant après des erreurs et l'évite pendant un certain temps.
  • Mise en cache : stocker des copies de réponses, telles que du contenu statique, pour alléger la charge des serveurs backend plus lents.
  • Terminaison TLS : déchiffrer les requêtes des clients et chiffrer les réponses, afin que les serveurs backend n'aient pas à le faire.
  • Compression : compresser le contenu pour accélérer les temps de chargement.
  • Une adresse pour plusieurs serveurs : regrouper plusieurs serveurs dans le même espace d'URL.

Proxy inverse vs. Équilibreur de charge

L'équilibrage de charge est une tâche qu'un proxy inverse peut effectuer, et non un type de serveur distinct. Nginx agit comme un équilibreur de charge HTTP en transmettant des requêtes à un groupe de serveurs en amont. Un proxy inverse qui transmet à un seul backend, comme Apache envoyant un chemin d'URL à un hôte interne, est toujours un proxy inverse sans équilibrer quoi que ce soit.

Ce que cela signifie pour le scraping web

  • Vous atteignez d'abord le proxy : lorsqu'un site utilise un proxy inverse, votre demande est traitée là avant que l'origine ne la voie, ce qui permet d'appliquer la mise en cache, les limites de taux et les vérifications de bot au niveau du proxy.
  • IP client dans les en-têtes : le backend voit l'adresse du proxy inverse, donc le proxy transmet souvent l'IP du client dans un en-tête. La documentation de Nginx montre X-Real-IP, et X-Forwarded-For est l'en-tête standard de facto pour cela. Si vous vous connectez via un proxy direct, cet en-tête porte l'IP du proxy direct, pas la vôtre.

Considérations de sécurité

  • Trafic déchiffré : un proxy inverse qui termine le TLS détient la clé du certificat du site et traite les demandes de manière non chiffrée.
  • Risque de proxy ouvert : la documentation d'Apache avertit que les serveurs proxy ouverts sont dangereux pour votre réseau et pour Internet en général. Un proxy inverse n'a pas besoin que le proxy direct (ProxyRequests) soit activé.

Termes associés