Document du cours

Cache web,
proxy et proxy inverse

Les notions derrière Varnish : pourquoi garder une copie toute prête, et qui se place entre le visiteur et le serveur.

420-5A4-MT · Module 2 · Cache web
Notion 1

Le cache web

La mise en cache de documents web (pages, images) sert à réduire la bande passante, alléger la charge du serveur et accélérer la consultation. Un cache web conserve des copies des documents qui transitent par lui et peut, dans certaines conditions, répondre aux requêtes suivantes à partir de ses copies, sans recourir au serveur d'origine.

Notion 1 · Suite

Qui gère un cache en chemin ?

Chaque objet a une durée de validité : si la copie est encore bonne, on la sert sans redemander au serveur. C'est pourquoi une mise à jour de site peut prendre du temps à paraître : tous ces caches doivent se rafraîchir.

Notion 2

Varnish

Varnish est un serveur de cache HTTP apparu en 2006, distribué sous licence BSD. Déployé en proxy inverse entre les serveurs d'applications et les clients, il sert les requêtes plus rapidement tout en allégeant la charge des serveurs.

Le langage VCL
Les règles du cache s'écrivent dans des fichiers de configuration en langage VCL : on décide ce qui sera mis en cache ou non, et on peut modifier les données au passage.
Les modules VMOD
Le fonctionnement s'étend par des modules appelés VMOD : il en existe une cinquantaine, majoritairement sous licence libre.
Edge Side Includes
Varnish supporte les ESI : assembler une page à partir de fragments dont chacun a sa propre durée de cache.
Notion 3

Le proxy

Un proxy est un composant logiciel qui joue le rôle d'intermédiaire entre deux hôtes pour faciliter ou surveiller leurs échanges. Dans les réseaux, c'est un programme (ou le serveur qui le porte) servant d'intermédiaire pour accéder à un autre réseau, généralement Internet.

Attention : le proxy vit dans la couche application (HTTP, FTP, SSH - niveau 7). Erreur classique : tenter de le voir avec traceroute. Il n'y apparaît pas, car cette commande travaille au niveau 3 (IP) et ne peut pas connaître le proxy.

Notion 4

Le proxy inverse (reverse-proxy)

Le proxy ordinaire (forward) protège les clients du réseau public : il canalise toutes les requêtes du réseau interne vers Internet, met en cache les contenus fréquents, et garde les appareils anonymes.

Schéma d'un proxy : les clients du réseau interne passent par le proxy pour atteindre Internet
Le proxy « avant » : l'unique porte de sortie du réseau interne.
Notion 4 · Suite

Le sens inverse

Le reverse-proxy opère exactement dans l'autre sens : il protège les serveurs web. Les requêtes venant d'Internet sont reçues par le proxy, vérifiées contre les règles de sécurité, puis transmises aux serveurs d'arrière-plan. Une sécurité supplémentaire, et un point unique pour optimiser le trafic.

Schéma d'un reverse-proxy : les requêtes d'Internet passent par le proxy inverse avant d'atteindre les serveurs web
Le proxy inverse : l'unique porte d'entrée vers les serveurs.
Notion 4 · Fonctionnement

Où vit le proxy inverse ?

En général derrière un pare-feu, dans le réseau interne ou une zone démilitarisée (DMZ). Comme le proxy avant, il est la seule connexion entre Internet et le réseau privé : toutes les requêtes passent par la même interface avant d'être transférées aux systèmes ciblés.

Cette mise en commun permet de contrôler le trafic entrant, de servir plusieurs serveurs sous le même URL, de distribuer les requêtes uniformément, et d'accélérer les réponses grâce au cache.

Notion 5

Cinq applications du proxy inverse

1 · Caching
Garder en mémoire le contenu statique et les pages fréquentes : réponses partielles ou complètes aux requêtes répétitives, bande passante réduite, accès plus rapide. Le proxy compare régulièrement ses copies aux données distantes pour ne rien servir de périmé.
2 · Anonymisation
Le proxy intercepte toutes les requêtes : les clients croient parler directement au serveur cible. Le serveur d'arrière-plan reste anonyme.
3 · Encodage et protection
Scanners de virus, filtres de paquets, et l'externalisation des certificats SSL qui allège les serveurs web d'arrière-plan.
Notion 5 · Suite

Cinq applications du proxy inverse

4 · Répartition de charge
Lier un URL à plusieurs serveurs du réseau privé et distribuer les requêtes entrantes : le load-balancing empêche la surcharge d'un système et continue de fonctionner en cas de défaillance d'un serveur - les requêtes vont aux serveurs disponibles.
5 · Compression
Équipé du logiciel approprié (Gzip, souvent combiné à Apache ou nginx), le proxy inverse compresse les données entrantes et sortantes.

La répartition de charge et la protection reviendront en force à la semaine 8 : c'est exactement le rôle de HAProxy et de l'IP virtuelle.

Notion 6

L'autre famille : les caches d'exécution

Varnish évite d'exécuter le site : la réponse complète est déjà prête. Les caches d'exécution font l'inverse : ils accélèrent l'exécution quand elle doit avoir lieu - page personnalisée, usager connecté, contenu qui change à chaque requête.

OPcache (PHP)
Garde en mémoire le code PHP déjà compilé (le bytecode) : le serveur ne recompile pas les mêmes fichiers à chaque visite. Activé par défaut dans les PHP modernes.
Memcached
Un serveur de mémoire partagée : les résultats de requêtes et les objets coûteux y sont déposés et relus en microsecondes, même depuis plusieurs serveurs web.
APCu et Redis
APCu : le petit cache d'objets local à la machine. Redis : le grand frère persistant de Memcached, avec structures de données riches.
Notion 6 · La carte

Qui se cache où ?

Laptop du visiteur (machine distante) Navigateur Cache du navigateur Internet Serveur Varnish (sa propre machine) Varnish cache HTTP (pages complètes) Serveur web (un seul ordinateur) Apache mod_cache PHP OPcache (bytecode) APCu (objets) MySQL cache de requêtes Memcached service en RAM (ou sur sa propre machine) Le disque et la RAM de CE serveur portent tous ces caches à la fois.

Le trajet d'une requête se lit de gauche à droite : chaque étape peut répondre depuis SON cache et court-circuiter tout ce qui se trouve à sa droite.

Notion 6 · La comparaison

Cache HTTP ou cache d'exécution ?

Les deux familles se complètent : Varnish absorbe les visiteurs anonymes, les caches d'exécution soulagent les pages personnalisées. La semaine 7, quand les Guildes rendront chaque page unique, vous saurez pourquoi le cache HTTP ne suffira plus.