Comment configurer un serveur de cache Varnish – Swapps
Les sites Web à fort trafic doivent servir le même contenu plusieurs fois à différents utilisateurs. Selon votre application, Il peut être très coûteux (ressources parlant) de traiter toute la logique de l’application chaque fois qu’un utilisateur demande une page Web. Voici où vient la mise en cache du serveur, vous pouvez simplement enregistrer une copie temporaire du contenu en mémoire et servir ce contenu à tous les utilisateurs.
Varnish est idéal pour mettre en cache du contenu côté serveur. Essentiellement, vous devez mettre en cache le contenu HTML, mais vous pouvez également mettre en cache les fichiers: CSS, JS, images, documents.
Cela sonne bien, mais la vérité est par défaut que Varnish ne fait rien, ou du moins vous pourriez gaspiller les avantages de ce logiciel, et la documentation n’aide pas, alors j’ai écrit cet article, pour que vous puissiez tirer le meilleur parti de Varnish. Je vais vous expliquer où et comment configurer, tester et déployer un serveur de cache Varnish pour votre application.
À des fins de démonstration, supposons que nous ayons 2 instances de serveur pour nos serveurs d’applications et de cache avec les adresses IP locales suivantes:
- Serveur d’applications: 192.168.1.2
- Serveur de cache: 192.168.1.3
Installez Varnish Cache Server
Pour cet article, nous allons installer un serveur Ubuntu 16.04 avec Varnish 4.0. Pour installer le vernis, il vous suffit d’exécuter:
sudo apt install varnish
Je vais installer Varnish 4.0, et à partir de maintenant, vous porterez une attention particulière à 2 fichiers spécifiques: /etc/default/varnish
et /etc/varnish/default.vcl
Configuration du backend
La première chose à faire est de configurer le backend ou d’indiquer à Varnish où l’application Web vivra:
- Quel est le nom d’hôte ou l’adresse IP ?
- Quel est le port ?
Pour définir que vous devez aller mettre à jour le fichier /etc/varnish/default.vcl
et trouver la section suivante, qui sera configurée pour notre exemple comme ceci:
backend default { .host = "192.168.1.2"; .port = "8080"; .first_byte_timeout = 60s; .connect_timeout = 300s;}
Il demandera à Varnish d’écouter l’application s’exécutant sur IP 192.168.1.2 et le port 8080.
Configurez le démon Varnish
La première chose que vous devez définir où Varnish s’exécutera. Nous allons le laisser fonctionner sur le port par défaut 6081. Il est très courant d’exécuter ce démon sur les ports 80 et 443 pour SSL, mais nous préférons mettre NGINX à l’avant et le laisser s’occuper du trafic.
En ce qui concerne la mémoire, une installation vide de vernis fonctionnera avec 256 Mo de mémoire, ce qui pourrait suffire pour certaines applications, mais pour les applications à fort trafic, Cela pourrait ne pas suffire, et plus si vous avez réservé un serveur dédié uniquement au cache.
Vous pouvez changer cela à:
/etc/default/varnish
Trouvez la section suivante:
DAEMON_OPTS="-a :6081 \-T localhost:6082 \-f /etc/varnish/default.vcl \-S /etc/varnish/secret \-s malloc,256m"
Pour mettre à jour la quantité de RAM, vous modifiez la dernière ligne où il est dit 256m et mettez à jour pour la valeur requise, sur mon cas, je veux consacrer 3 Go de RAM à Varnish, de sorte que le bloc ressemblera à:
DAEMON_OPTS="-a :6081 \-T localhost:6082 \-f /etc/varnish/default.vcl \-S /etc/varnish/secret \-s malloc,3G"
Validez qu’Il s’exécute avec la bonne configuration
Confirmez qu’il s’exécute comme prévu, vérifiez le processus ps aux | grep varnish
et vous devriez voir quelque chose comme:
/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T :6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,3G
Correction du démon de démarrage de Varnish dans certaines installations Ubuntu
Nous avons détecté un bogue où le service ne suit pas les instructions définies dans le fichier varnish et vous devrez peut-être modifier le service de démarrage.
Pour ce faire, ouvrez et modifiez le fichier
/lib/systemd/system/varnish.service
et vous verrez quelque chose comme ceci:
Description=Varnish HTTP acceleratorDocumentation=https://www.varnish-cache.org/docs/4.1/ man:varnishdType=simpleLimitNOFILE=131072LimitMEMLOCK=infinityExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T :6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256MExecReload=/usr/share/varnish/reload-vclProtectSystem=fullProtectHome=truePrivateTmp=truePrivateDevices=trueWantedBy=multi-user.target
Pour que cela fonctionne, vous devrez mettre à jour la section à l’intérieur de la ligne ExecStart et la remplacer pour la configuration requise:
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T :6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,3G
Une fois cela terminé, vous devez recharger le démon de service: systemctl daemon-reload
puis redémarrez Varnish.
Comment configurer pour PURGER le cache
Il existe 2 façons d’effacer le cache de vernis:
- Redémarrez le service de vernis.
- Envoie une demande de PURGE au serveur Varnish.
Redémarrer le vernis Il s’agit simplement de redémarrer le service:
sudo service varnish restart
Mais ce dont nous avons vraiment besoin, c’est de pouvoir envoyer une demande de PURGE depuis le serveur d’applications. Cela peut être réalisé en demandant au serveur de purger un CHEMIN spécifique ou tous. En utilisant CURL, la requête ressemblerait à:
curl -X PURGE http://192.168.1.3:6181
Par défaut, Varnish n’autorise pas une demande de PURGE d’un serveur externe, vous devez donc autoriser les demandes du serveur d’applications. Pour ce faire, allez éditer /etc/varnish/default.vcl
et trouvez la section purge où vous devez ajouter l’adresse IP du serveur d’applications:
acl purge { "localhost"; "127.0.0.1"; "192.168.1.2"/24;}
Comment déboguer la PURGE
Vous devrez valider que tout fonctionne correctement. Pour ce faire, vous pouvez utiliser la commande suivante:
varnishlog -g request -q 'ReqMethod eq "PURGE"'
Ensuite, vous pouvez envoyer une demande de PURGE et vous devriez voir quelque chose comme ceci pour confirmer que la demande de PURGE a été reçue:
* << Request >> 1179851- Begin req 1179850 rxreq- ReqStart 192.168.195.197 39700- ReqMethod PURGE- ReqURL /.*- ReqProtocol HTTP/1.1- ReqHeader Host: swapps.com- ReqHeader User-Agent: W3 Total Cache- ReqHeader Connection: close- ReqHeader X-Forwarded-For: 192.168.195.197- VCL_call RECV- Timestamp Process: 1531199642.768541 0.000094 0.000094- RespHeader Date: Tue, 10 Jul 2018 05:14:02 GMT- RespHeader Server: Varnish- RespHeader X-Varnish: 1179851- RespProtocol HTTP/1.1- RespStatus 200- RespReason OK- RespReason Purged- End
Un statut 200 OK signifie que tout s’est bien passé et que Varnish a effacé le cache de l’URL demandée, et vous devriez avoir tout ce dont vous avez besoin pour commencer à mettre en cache le contenu sur votre serveur.
L’étape suivante si vous ne l’avez pas fait est de configurer les règles du contenu que vous souhaitez mettre en cache et de celui qui ne l’est pas, mais c’est le sujet d’un autre article de blog et cela dépendra fortement du type d’application, de framework ou de CMS utilisé.