Comment configurer Varnish Cache 4.0 avec terminaison SSL sur Ubuntu 14.04
Introduction
Dans ce tutoriel, nous couvrirons comment utiliser Varnish Cache 4.0 pour améliorer les performances de votre serveur web existant. Nous vous montrerons également une manière d'ajouter le support HTTPS à Varnish, avec Nginx assurant la terminaison SSL. Nous supposerons que vous avez déjà un serveur d'application web configuré, et nous utiliserons un serveur LAMP générique (Linux, Apache, MySQL, PHP) comme point de départ.
Varnish Cache est un proxy inverse HTTP de mise en cache, ou un accélérateur HTTP, qui réduit le temps nécessaire pour servir du contenu à un utilisateur. La principale technique qu'il utilise consiste à mettre en cache les réponses d'un serveur web ou d'application en mémoire, afin que les futures requêtes pour le même contenu puissent être servies sans avoir à le récupérer depuis le serveur web. Les performances peuvent être considérablement améliorées dans une variété d'environnements, et il est particulièrement utile lorsque vous avez des applications web dynamiques riches en contenu. Varnish a été conçu avec la mise en cache comme fonctionnalité principale, mais il a également d'autres utilisations, telles que l'équilibrage de charge en tant que proxy inverse.
Dans de nombreux cas, Varnish fonctionne bien avec ses paramètres par défaut, mais gardez à l'esprit qu'il doit être ajusté pour améliorer les performances avec certaines applications, en particulier celles qui utilisent des cookies. Un réglage approfondi de Varnish dépasse le cadre de ce tutoriel.
Prérequis
Dans ce tutoriel, nous supposons que vous disposez déjà d'un serveur d'application web qui écoute sur HTTP (port 80) à son adresse IP privée. Si vous n'avez pas encore configuré de serveur web, utilisez le lien suivant pour installer votre propre pile LAMP : Comment installer la pile Linux, Apache, MySQL, PHP (LAMP) sur Ubuntu 14.04. Nous nous référerons à ce serveur sous le nom de LAMP_VPS.
Vous devrez créer un nouveau VPS Ubuntu 14.04 qui sera utilisé pour votre installation de Varnish. Créez un utilisateur non root avec des permissions sudo en suivant les étapes 1 à 4 du guide de configuration initiale du serveur pour Ubuntu 14.04. Nous nous référerons à ce serveur sous le nom de Varnish_VPS.
Gardez à l'esprit que le serveur Varnish recevra des requêtes utilisateur et doit être dimensionné de manière appropriée pour la quantité de trafic que vous prévoyez de recevoir.
Notre objectif
Notre objectif est de configurer Varnish Cache devant notre serveur d'application web, afin que les requêtes puissent être servies rapidement et efficacement. Une fois la mise en cache configurée, nous vous montrerons comment ajouter la prise en charge de HTTPS à Varnish, en utilisant Nginx pour gérer les requêtes SSL entrantes. Une fois votre configuration terminée, votre trafic HTTP et HTTPS bénéficiera des avantages de performance de la mise en cache.
Maintenant que vous avez configuré les prérequis et que vous savez ce que vous essayez de construire, commençons !
Installer Varnish
La manière recommandée d'obtenir la dernière version de Varnish 4.0 est d'installer le paquet disponible via le dépôt officiel.
Ubuntu 14.04 est livré avec apt-transport-https, mais exécutez simplement la commande suivante sur Varnish_VPS pour être sûr :
sudo apt-get install apt-transport-httpsAjoutez maintenant la clé GPG de Varnish à apt :
curl https://repo.varnish-cache.org/ubuntu/GPG-key.txt | sudo apt-key add -Puis ajoutez le dépôt Varnish 4.0 à votre liste de sources apt :
sudo sh -c 'echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list'
Enfin, mettez à jour apt-get et installez Varnish avec les commandes suivantes :
sudo apt-get update
sudo apt-get install varnishPar défaut, Varnish est configuré pour écouter sur le port 6081 et s'attend à ce que votre serveur web soit sur le même serveur et écoute sur le port 8080. Ouvrez un navigateur et allez au port 6081 de votre serveur (remplacez la partie surlignée par votre adresse IP publique ou votre domaine) :
http://varnish_VPS_public_IP:6081Parce que nous avons installé Varnish sur un nouveau VPS, visiter le port 6081 sur l’adresse IP publique de votre serveur ou le nom de domaine retournera la page d’erreur suivante :
Cela indique que Varnish est installé et fonctionne, mais qu'il ne peut pas trouver le serveur web qu'il est censé mettre en cache. Configurons-le maintenant pour utiliser notre serveur web comme backend.
Configurer Varnish
Tout d'abord, nous allons configurer Varnish pour utiliser notre LAMP_VPS comme backend.
Le fichier de configuration de Varnish se trouve à /etc/varnish/default.vcl. Éditons-le maintenant :
sudo vi /etc/varnish/default.vclTrouvez les lignes suivantes :
backend default {
.host = "127.0.0.1";
.port = "8080";
}Et modifiez les valeurs de host et port pour correspondre respectivement à l'adresse IP privée et au port d'écoute de votre serveur LAMP. Notez que nous supposons que votre application web écoute sur son adresse IP privée et le port 80. Si ce n'est pas le cas, modifiez la configuration pour qu'elle corresponde à vos besoins :
backend default {
.host = "LAMP_VPS_private_IP";
.port = "80";
}Varnish possède une fonctionnalité appelée « mode de grâce » qui, lorsqu'elle est activée, ordonne à Varnish de fournir une copie mise en cache des pages demandées si votre serveur web backend tombe en panne et devient indisponible. Activons cela maintenant. Trouvez le bloc suivant sub vcl_backend_response et ajoutez-lui les lignes mises en évidence suivantes :
sub vcl_backend_response {
set beresp.ttl = 10s;
set beresp.grace = 1h;
}
Cela définit la période de grâce des pages mises en cache à une heure, ce qui signifie que Varnish continuera à servir des pages mises en cache pendant une heure si elle ne peut pas atteindre votre serveur web pour chercher une copie fraîche. Cela peut être utile si votre serveur d'application tombe en panne et que vous préférez que du contenu périmé soit servi aux utilisateurs plutôt qu'une page d'erreur (comme l'erreur 503 que nous avons vue précédemment), pendant que vous remettez votre serveur web en ligne.
Enregistrez et quittez le fichier default.vcl.
Nous voudrons configurer Varnish pour écouter sur le port HTTP par défaut (80), afin que vos utilisateurs puissent accéder à votre site sans ajouter un numéro de port inhabituel à votre URL. Cela peut être configuré dans le fichier /etc/default/varnish. Éditons-le maintenant :
sudo vi /etc/default/varnishVous verrez beaucoup de lignes, mais la plupart sont commentées. Trouvez la ligne suivante DAEMON_OPTS (elle devrait déjà être décommentée) :
DAEMON_OPTS="-a :6081 \L'option -a est utilisée pour attribuer l'adresse et le port sur lesquels Varnish écoutera les requêtes. Changeons-la pour qu'elle écoute sur le port HTTP par défaut, le port 80. Après votre modification, cela devrait ressembler à ceci :
DAEMON_OPTS="-a :80 \Enregistrer et quitter.
Redémarrez maintenant Varnish pour que les modifications prennent effet :
sudo service varnish restartTestez-le maintenant avec un navigateur web, en visitant votre serveur Varnish par son adresse IP publique, sur le port 80 (HTTP) cette fois-ci :
http://varnish_VPS_public_IPVous devriez voir la même chose qui est servie depuis votre LAMP_VPS. Dans notre cas, c’est juste une page Apache2 Ubuntu simple :
À ce stade, Varnish met en cache notre serveur d'application - espérons que vous constaterez des améliorations de performance grâce à la réduction du temps de réponse. Si vous aviez un nom de domaine pointant vers votre serveur d'application existant, vous pouvez modifier son entrée DNS pour qu'elle pointe vers votre Varnish_VPS_public_IP.
Maintenant que nous avons mis en place la mise en cache de base, ajoutons la prise en charge de SSL avec Nginx !
Support SSL avec Nginx (Optionnel)
Varnish ne prend pas en charge la terminaison SSL nativement, nous allons donc installer Nginx dans le seul but de gérer le trafic HTTPS. Nous couvrirons les étapes pour installer et configurer Nginx avec un certificat SSL auto-signé, et pour acheminer le trafic d'une connexion HTTPS vers Varnish via HTTP.
Si vous souhaitez une explication plus détaillée sur la configuration d'un certificat SSL auto-signé avec Nginx, consultez ce lien : SSL avec Nginx pour Ubuntu. Si vous voulez essayer un certificat de StartSSL, voici un tutoriel qui couvre cela.
Installons Nginx.
Installer Nginx
Sur Varnish_VPS, installons Nginx avec la commande apt suivante :
sudo apt-get install nginxAprès l'installation, vous remarquerez que Nginx ne fonctionne pas. Cela est dû au fait qu'il est configuré pour écouter sur le port 80 par défaut, mais Varnish utilise déjà ce port. Cela est normal car nous voulons écouter sur le port HTTPS par défaut, le port 443.
Générons le certificat SSL que nous allons utiliser.
Générer un certificat SSL auto-signé
Sur Varnish_VPS, créez un répertoire où le certificat SSL peut être placé :
sudo mkdir /etc/nginx/sslGénérez une paire de clé et certificat SSL auto-signés de 2048 bits :
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crtAssurez-vous de définir common name pour correspondre à votre nom de domaine. Ce certificat particulier expirera dans un an.
Maintenant que nous avons notre certificat en place, configurons Nginx pour l'utiliser.
Configurer Nginx
Ouvrez la configuration du bloc serveur Nginx par défaut pour l’édition :
sudo vi /etc/nginx/sites-enabled/defaultSupprimez tout dans le fichier et remplacez-le par ce qui suit (et changez le server_name pour correspondre à votre nom de domaine) :
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
proxy_pass http://127.0.0.1:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header Host $host;
}
}Enregistrez et quittez. La configuration ci-dessus contient quelques lignes importantes que nous expliquerons plus en détail :
- ssl_certificate : spécifie l'emplacement du certificat SSL
- ssl_certificate_key : spécifie l'emplacement de la clé SSL
- écouter 443 ssl : configure Nginx pour écouter sur le port 443
- server_name : spécifie le nom de votre serveur et doit correspondre au nom commun de votre certificat SSL
- proxy_pass http://127.0.0.1:80; : redirige le trafic vers Varnish (qui fonctionne sur le port 80 de 127.0.0.1 (c’est-à-dire
localhost))
Les autres lignes proxy_set_header indiquent à Nginx de transférer des informations, telles que l'adresse IP originale de l'utilisateur, avec toutes les requêtes de l'utilisateur.
Maintenant, lançons Nginx afin que notre serveur puisse gérer les requêtes HTTPS.
sudo service nginx startTestez-le maintenant avec un navigateur web, en visitant votre serveur Varnish par son adresse IP publique, sur le port 443 (HTTPS) cette fois-ci :
https://varnish_VPS_public_IPRemarque : Si vous avez utilisé un certificat auto-signé, vous verrez un avertissement indiquant quelque chose comme « Le certificat de sécurité du site n’est pas approuvé ». Puisque vous savez que vous venez de créer le certificat, il est sûr de continuer.
Encore une fois, vous devriez voir la même page d'application qu'auparavant. La différence est que vous visitez réellement le serveur Nginx, qui gère le chiffrement SSL et transmet la requête non chiffrée à Varnish, qui traite la requête comme il le fait habituellement.
Configurer le serveur web back-end
Si votre serveur web backend est lié à toutes ses interfaces réseau (c'est-à-dire aux interfaces réseau publiques et privées), vous devrez modifier la configuration de votre serveur web afin qu'il n'écoute que sur son interface privée. Cela permet d'empêcher les utilisateurs d'accéder directement à votre serveur web backend via son adresse IP publique, ce qui contournerait votre cache Varnish.
Dans Apache ou Nginx, cela impliquerait d'attribuer la valeur des directives listen pour se lier à l'adresse IP privée de votre serveur backend.
Dépannage de Varnish
Si vous avez des difficultés à faire en sorte que Varnish serve correctement vos pages, voici quelques commandes qui vous aideront à voir ce que fait Varnish en coulisses.
Statistiques
Si vous voulez avoir une idée de la performance de votre cache, vous voudrez jeter un œil à la commande varnishstat. Exécutez-la comme ceci :
varnishstatVous verrez un écran qui ressemble à ce qui suit :
Il existe une grande variété de statistiques qui apparaissent, et utiliser les flèches haut/bas pour défiler vous montrera une courte description de chaque élément. La statistique cache_hit vous montre combien de requêtes ont été servies avec un résultat mis en cache - vous voulez que ce nombre soit aussi proche que possible du nombre total de requêtes client (client_req).
Appuyez sur q pour quitter.
Journaux
Si vous voulez obtenir une vue détaillée de la façon dont Varnish gère chaque requête individuelle, sous la forme d'un journal en continu, vous voudrez utiliser la commande varnishlog. Exécutez-la ainsi :
varnishlogUne fois qu'il est en cours d'exécution, essayez d'accéder à votre serveur Varnish via un navigateur web. Pour chaque requête que vous envoyez à Varnish, vous verrez une sortie détaillée qui peut être utilisée pour aider à dépanner et à optimiser votre configuration Varnish.
Appuyez sur CTRL + C pour quitter.
Conclusion
Maintenant que votre serveur web dispose d'un serveur Varnish Cache devant lui, vous constaterez une amélioration des performances dans la plupart des cas. N'oubliez pas que Varnish est très puissant et configurable, et qu'il peut nécessiter des ajustements supplémentaires pour en tirer pleinement parti.




