Comment configurer Varnish Cache 4.0 avec terminaison SSL sur Ubuntu 14.04

introduction

Dans ce didacticiel, nous expliquerons comment utiliser Varnish Cache 4.0 pour améliorer les performances de votre serveur Web existant. Nous vous montrerons également un moyen d’ajouter le support HTTPS à Varnish, Nginx effectuant la résiliation SSL. Nous supposerons que vous avez déjà configuré un serveur d'applications Web et nous allons utiliser un serveur générique LAMP (Linux, Apache, MySQL, PHP) comme point de départ.

Varnish Cache est un proxy inverse HTTP en cache, ou accélérateur HTTP, qui réduit le temps nécessaire à la fourniture du contenu à un utilisateur. La technique principale utilisée est la mise en mémoire cache des réponses d’un serveur Web ou d’un serveur d’applications. Ainsi, les demandes ultérieures relatives au même contenu peuvent être traitées sans qu’il soit nécessaire de les récupérer à partir du serveur Web. Les performances peuvent être considérablement améliorées dans divers environnements. Cela est particulièrement utile lorsque vous utilisez des applications Web dynamiques à fort contenu. Varnish a été créé avec la mise en cache comme fonctionnalité principale, mais il a également d'autres utilisations, telles que l'équilibrage de la charge de proxy inverse.

Dans de nombreux cas, Varnish fonctionne bien avec ses paramètres par défaut, mais gardez à l'esprit qu'il doit être réglé pour améliorer les performances avec certaines applications, notamment celles qui utilisent des cookies. Le réglage en profondeur de Varnish n’entre pas dans le cadre de ce didacticiel.

Conditions préalables

Dans ce didacticiel, nous supposons que vous avez déjà un serveur d'applications Web qui écoute sur HTTP (port 80) sur son adresse IP privée. Si vous n'avez pas encore configuré de serveur Web, utilisez le lien suivant pour configurer votre propre pile LAMP:How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 14.04. Nous appellerons ce serveurLAMP_VPS.

Existing Environment

Vous devrez créer un nouveau VPS Ubuntu 14.04 qui sera utilisé pour votre installation Varnish. Créez un utilisateur non root avec des autorisations sudo en exécutant les étapes 1 à 4 dans lesinitial server setup for Ubuntu 14.04 guide. Nous appellerons ce serveurVarnish_VPS.

N'oubliez pas que le serveur Varnish recevra les demandes des utilisateurs et devra être suffisamment dimensionné pour la quantité de trafic que vous prévoyez recevoir.

Notre objectif

Our Goal

Notre objectif est de configurer Varnish Cache devant notre serveur d'applications Web afin que les demandes puissent être traitées rapidement et efficacement. Une fois la mise en cache configurée, nous vous montrerons comment ajouter la prise en charge HTTPS à Varnish, en utilisant Nginx pour gérer les demandes SSL entrantes. Une fois votre configuration terminée, votre trafic HTTP et HTTPS bénéficiera des avantages de la mise en cache en termes de performances.

Maintenant que les conditions préalables sont définies et que vous savez ce que vous essayez de créer, commençons!

Installer le vernis

La méthode recommandée pour obtenir la dernière version de Varnish 4.0 consiste à installer le paquet disponible dans le référentiel officiel.

Ubuntu 14.04 est livré avecapt-transport-https, mais exécutez simplement la commande suivante surVarnish_VPS pour être sûr:

sudo apt-get install apt-transport-https

Maintenant, ajoutez la clé GPG Varnish à apt:

curl https://repo.varnish-cache.org/ubuntu/GPG-key.txt | sudo apt-key add -

Ajoutez ensuite le référentiel 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 varnish

Par défaut, Varnish est configuré pour écouter sur le port6081 et s'attend à ce que votre serveur Web soit sur le même serveur et écoute sur le port8080. Ouvrez un navigateur et accédez au port 6081 de votre serveur (remplacez la partie en surbrillance par votre adresse IP publique ou votre domaine):

http://varnish_VPS_public_IP:6081

Étant donné que nous avons installé Varnish sur un nouveau VPS, la visite du port6081 sur l'adresse IP publique ou le nom de domaine de votre serveur renverra la page d'erreur suivante:

503 Error

Cela indique que Varnish est installé et en cours d’exécution, mais il ne trouve pas le serveur Web qu’il est censé mettre en cache. Configurons-le pour utiliser notre serveur Web en tant que backend maintenant.

Configurer le vernis

Tout d'abord, nous allons configurer Varnish pour utiliser nosLAMP_VPS comme backend.

Le fichier de configuration de Varnish se trouve à/etc/varnish/default.vcl. Modifions-le maintenant:

sudo vi /etc/varnish/default.vcl

Trouvez les lignes suivantes:

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

Et modifiez les valeurs dehost etport correspondant 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 répondre à vos besoins:

backend default {
    .host = "LAMP_VPS_private_IP";
    .port = "80";
}

Varnish a une fonctionnalité appelée «mode grâce» qui, lorsqu'elle est activée, indique à Varnish de servir une copie en cache des pages demandées si le serveur dorsal de votre serveur Web tombe en panne et devient indisponible. Laissons cela maintenant. Recherchez le blocsub vcl_backend_response suivant et ajoutez-y les lignes en surbrillance suivantes:

sub vcl_backend_response {
    set beresp.ttl = 10s;
    set beresp.grace = 1h;
}

Ceci définit la période de grâce des pages en cache sur une heure, ce qui signifie que Varnish continuera à servir les pages en cache pendant une heure au maximum s’il ne parvient pas à atteindre votre serveur Web de rechercher une nouvelle copie. Cela peut être pratique si votre serveur d’application tombe en panne et si vous préférez que le 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), lors de la restauration de votre serveur Web.

Enregistrez et quittez le fichierdefault.vcl.

Nous voudrons configurer Varnish pour qu'il écoute sur le port HTTP par défaut (80), afin que vos utilisateurs puissent accéder à votre site sans ajouter de numéro de port inhabituel à votre URL. Cela peut être défini dans le fichier/etc/default/varnish. Modifions-le maintenant:

sudo vi /etc/default/varnish

Vous verrez beaucoup de lignes, mais la plupart d’entre elles sont commentées. Trouvez la ligneDAEMON_OPTS suivante (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. Modifions-le pour écouter le port HTTP par défaut, le port 80. Après votre modification, cela devrait ressembler à ceci:

DAEMON_OPTS="-a :80 \

Sauvegarder et quitter.

Maintenant, redémarrez Varnish pour appliquer les modifications:

sudo service varnish restart

Maintenant, testez-le avec un navigateur Web, en visitant votre serveur Varnish par son adresse IP publique, sur le port 80 (HTTP) cette fois:

http://varnish_VPS_public_IP

Vous devriez voir la même chose qui est servie depuis votre LAMP_VPS. Dans notre cas, il s’agit d’une simple page Apache2 Ubuntu:

Apache2 Ubuntu Default Page

À ce stade, Varnish met en cache notre serveur d'applications. Espérons que vous constaterez des avantages en termes de performances grâce à un temps de réponse réduit. Si vous aviez un nom de domaine pointant vers votre serveur d'applications existant, vous pouvez modifier son entrée DNS pour pointer vers vosVarnishVPSpublic_IP.

Maintenant que la mise en cache de base est configurée, ajoutons la prise en charge de SSL avec Nginx!

Prise en charge de SSL avec Nginx (facultatif)

Varnish ne supporte pas la terminaison SSL de manière native, 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 le trafic proxy inverse d'une connexion HTTPS vers Varnish via HTTP.

Si vous souhaitez une explication plus détaillée de la configuration d'un certificat SSL auto-signé avec Nginx, reportez-vous à ce lien:SSL with Nginx for Ubuntu. Si vous souhaitez essayer un certificat de StartSSL,here is a tutorial that covers that.

Installons Nginx.

Installer Nginx

SurVarnish_VPS, installons Nginx avec la commande apt suivante:

sudo apt-get install nginx

Une fois l'installation terminée, vous remarquerez que Nginx n'est pas en cours d'exécution. Cela est dû au fait qu'il est configuré pour écouter sur le port 80 par défaut, alors que Varnish utilise déjà ce port. Cela convient car nous souhaitons écouter sur le port HTTPS par défaut, le port 443.

Générons le certificat SSL que nous utiliserons.

Générer un certificat SSL auto-signé

SurVarnish_VPS, créez un répertoire dans lequel le certificat SSL peut être placé:

sudo mkdir /etc/nginx/ssl

Générez une paire de certificats et de clés SSL auto-signée 2048 bits:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

Assurez-vous que vous définissezcommon name pour correspondre à votre nom de domaine. Ce certificat particulier expirera dans un an.

Maintenant que notre certificat est en place, configurons Nginx pour l’utiliser.

Configurez Nginx

Ouvrez la configuration de bloc du serveur Nginx par défaut pour modification:

sudo vi /etc/nginx/sites-enabled/default

Supprimez tout ce qui se trouve dans le fichier et remplacez-le par ce qui suit (et modifiez lesserver_name pour qu'ils correspondent à 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;
        }
}

Sauvegarder et quitter. La configuration ci-dessus comporte quelques lignes importantes que nous expliquerons plus en détail:

  • ssl_certificate: spécifie l'emplacement du certificat SSL

  • sslcertificatekey: spécifie l'emplacement de la clé SSL

  • listen 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 s'exécute sur le port 80 de 127.0.0.1 (i.e. localhost)

Les autres lignesproxy_set_header indiquent à Nginx de transmettre des informations, telles que l’adresse IP de l’utilisateur d’origine, ainsi que toute demande de l’utilisateur.

Lançons maintenant Nginx pour que notre serveur puisse gérer les requêtes HTTPS.

sudo service nginx start

Maintenant, testez-le avec un navigateur Web, en visitant votre serveur Varnish par son adresse IP publique, sur le port 443 (HTTPS) cette fois:

https://varnish_VPS_public_IP

Note: Si vous avez utilisé un certificat auto-signé, vous verrez un avertissement disant 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, vous pouvez continuer en toute sécurité.

Encore une fois, vous devriez voir la même page d’application que précédemment. La différence réside dans le fait que vous visitez actuellement le serveur Nginx, qui gère le chiffrement SSL et transmet la demande non chiffrée à Varnish, qui traite la demande comme il le fait normalement.

Configurer le serveur Web principal

Si votre serveur Web principal est lié à toutes ses interfaces réseau (c'est-à-dire réseaux publics et privés), vous souhaiterez modifier la configuration de votre serveur Web afin que celui-ci n’écoute que sur son interface privée. Ceci afin d'empêcher les utilisateurs d'accéder à votre serveur Web principal directement via son adresse IP publique, qui contournerait votre cache Varnish.

Dans Apache ou Nginx, cela impliquerait d'attribuer la valeur des directiveslisten à lier à l'adresse IP privée de votre serveur backend.

Dépannage du vernis

Si vous rencontrez des difficultés pour que Varnish serve correctement vos pages, voici quelques commandes qui vous aideront à voir ce que Varnish fait dans les coulisses.

Statistiques

Si vous voulez avoir une idée de la performance de votre cache, vous voudrez jeter un œil à la commandevarnishstat. Exécutez-le comme ça:

varnishstat

Vous obtiendrez un écran ressemblant à ce qui suit:

Varnish Stats

Il y a une grande variété de statistiques qui apparaissent, et en utilisant les flèches haut / bas pour faire défiler vous montrera une courte description de chaque élément. La statistique decache_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 surq pour quitter.

Logs

Si vous souhaitez obtenir une vue détaillée de la manière dont Varnish gère chaque requête individuelle, sous la forme d'un journal de diffusion en continu, vous souhaiterez utiliser la commandevarnishlog. Exécutez-le comme ça:

varnishlog

Une fois qu'il est en cours d'exécution, essayez d'accéder à votre serveur Varnish via un navigateur Web. Pour chaque demande que vous envoyez à Varnish, vous verrez une sortie détaillée pouvant être utilisée pour vous aider à dépanner et ajuster votre configuration Varnish.

Appuyez surCTRL + C pour quitter.

Conclusion

Maintenant que votre serveur Web dispose d'un serveur Varnish Cache, vous constaterez une amélioration des performances dans la plupart des cas. Rappelez-vous que Varnish est très puissant et qu’il est réglable, et qu’il peut nécessiter des ajustements supplémentaires pour en tirer tous les avantages.