Varnish

Comment installer Varnish cache sur CentOS/RHEL8

Varnish cache est un accélérateur web open source, Il s’agit d’un reverse proxy HTTP rapide qui met en cache le contenu pour accélérer les performances de votre serveur Web. Il est configuré en front d’un serveur Web comme Apache.

Lorsqu’un client envoie une requête au serveur web , Varnish accepte et envoie la demande au serveur d’origine, met en cache les objets retournés et répond à la demande du client. La prochaine fois qu’un client demandera le même contenu c’est Varnish qui répondra à partir du cache. De ce fait, le temps de réponse et la consommation de bande passante sont réduits.

Varnish peut être utilisé comme un Firewall d’application Web et load balancer.

Dans cet article nous allons découvrir comment installer et configurer Varnish en front sur CentOS/RHEL8.

Installation du serveur Web Apache sur CentOS/RHEL8:

Installer Apache :

D’abord mettez à jours vos packages avec la commande dnf :

[root@srv ~]# dnf update

Ensuite taper la commande suivante pour installer le serveur Web Apache HTTP :

[root@srv ~]# dnf install httpd

Une fois installé, démarrer le service http et n’oubliez pas de le mettre en enable pour qu’il soit démarré au démarrage du système :

[root@srv ~]# systemctl start httpd
[root@srv ~]# systemctl enable httpd.service
[root@srv ~]# systemctl is-enabled httpd.service
enabled
[root@srv ~]# systemctl status httpd

Permettre l’accès au port http :

Il faut ensuite ouvrir le port http au niveau du firewall pour permettre l’accès à vos sites web ou aux application web:

Vérifier d’abord si le service firewal est bien démarré :

[root@srv ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since jeu. 2020-10-08 21:03:20 +01; 22min ago
Docs: man:firewalld(1)
Main PID: 15328 (firewalld)
CGroup: /system.slice/firewalld.service
└─15328 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
oct. 08 21:03:18 srv systemd[1]: Starting firewalld - dynamic firewall daemon…
oct. 08 21:03:20 srv systemd[1]: Started firewalld - dynamic firewall daemon.
oct. 08 21:03:20 srv firewalld[15328]: WARNING: AllowZoneDrifting is enable…w.
Hint: Some lines were ellipsized, use -l to show in full.

Ouvrez le port http au niveau du firewall avec la commande ci-dessous :

[root@srv ~]# firewall-cmd --zone=public --permanent --add-service=http
success

Faites un reload pour que la modification soit pris en charge :

[root@srv ~]# firewall-cmd --reload
success

Installation du Varnish sur CentOS/RHEL8:

[root@srv ~]# dnf module install varnish

Vous pouvez vérifier la version avec la commande ci-dessous :

[root@srv ~]# varnishd -V
varnishd (varnish-6.0.2 revision 07eff4c29)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2018 Varnish Software AS

Démarrez le service est mettez-le en enable :

[root@srv ~]# systemctl start varnish
[root@srv ~]# systemctl enable varnish
Created symlink from /etc/systemd/system/multi-user.target.wants/varnish.service to /usr/lib/systemd/system/varnish.service.
[root@srv ~]# systemctl status varnish
● varnish.service - Varnish Cache, a high-performance HTTP accelerator
Loaded: loaded (/usr/lib/systemd/system/varnish.service; enabled; vendor preset: disabled)
Active: active (running) since jeu. 2020-10-08 22:06:09 +01; 12s ago
Main PID: 50110 (varnishd)
CGroup: /system.slice/varnish.service
├─50110 /usr/sbin/varnishd -P /var/run/varnish.pid -f /etc/varnish/default.vcl -a :6081 -T …
└─50111 /usr/sbin/varnishd -P /var/run/varnish.pid -f /etc/varnish/default.vcl -a :6081 -T …

Faire fonctionner Apache avec Varnish cache :

Maintenant nous allons configurer Varnish pour qu’il soit en front de Apache.

Par défaut Apache écoute sur le port 80, nous allons le changer car c’est Varnish qui écoutera sur ce port.

Pour cela éditez le fichier httpd.conf et changer le port 80 par un autre de votre choix, moi je vais mettre 8080 :

#Listen: Allows you to bind Apache to specific IP addresses and/or
ports, instead of the default. See also the
directive.
#
Change this to Listen on specific IP addresses as shown below to
prevent Apache from glomming onto all bound IP addresses.
#
Listen 12.34.56.78:80
Listen 8080

Il faut que chaque virtual Host sur votre serveur Web doit être avec ce port :

[root@srv ~]# vim /etc/httpd/conf.d/sysreseau.conf
<VirtualHost *:8080> 
DocumentRoot "/var/www/html/sysreseau/" 
ServerName www.sysreseau.lan 
.
.
.
.
</VirtualHost>

N’oubliez pas de supprimer le fichier de configuration par défaut pour qu’il ne soit pas utilisé ( /etc/httpd/conf.d/welcome.conf).

Vérifier la syntaxe de votre configuration Apache avant de relancer le service :

[root@srv ~]# httpd -t
Syntax OK
[root@srv ~]# systemctl restart httpd.service

Configuration de Varnish :

Comme je vous expliqué précédemment, nous devant configurer note service du caching pour qu’il écoute sur le port 80. Pour la version 6 et supérieur il faut éditer le fichier ci-dessous du systemd :

[root@srv ~]# vim /etc/systemd/system/varnish.service

ou bien

[root@srv ~]# systemctl edit --full  varnish

Chercher la ligne qui commence par ExecStart et changez le port 6081 par 80 :

ExecStart=/usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m

Configuration du Backend :

Maintenant nous allons préciser à Varnish le serveur backend, c’est à dire le serveur Apache dans notre cas. Pour cela éditer le fichier /etc/varnish/default.vcl et indiquez le port 8080 :

Default backend definition. Set this to point to your content server.
backend default {
.host = "127.0.0.1";
.port = "8080";
}

Si le serveur backend et Varnish sont sur le mem serveur, le paramètre .host doit pointer sur 127.0.0.1. Sinon il faut mettre l’adresse IP du serveur de Backend, par exemple :

Default backend definition. Set this to point to your content server.
backend default {
.host = "192.168.1.20";
.port = "8080";
}

Relancer ensuite le service de systemd manager et le service Varnish :

[root@srv ~]# systemctl daemon-reload
[root@srv ~]# systemctl restart varnish

A présent notre service du caching et Apache écoute respectivement sur les port 80 et 8080, vous pouvez vérifier cela avec la commande ss :

[root@srv ~]# ss -tlpn
State  Recv-Q Send-Q    Local Address:Port Peer Address:Port
LISTEN 0      128       *:22 *:* users:(("sshd",pid=1095,fd=3))
LISTEN 0      100       127.0.0.1:25 : users:(("master",pid=1195,fd=13))
LISTEN 0      128       [::]:22 [::]:* users:(("sshd",pid=1095,fd=4))
LISTEN 0      100       [::1]:25 [::]:* users:(("master",pid=1195,fd=14))
LISTEN 0      100       [::1]:25 [::]:* users:(("cache-main",pid=2680,f=6)
LISTEN 0      70        [::]:33060 [::]:* users:(("mysqld",pid=2536,fd=31))
LISTEN 0      128       0.0.0.0:80 0.0.0.0:80 users:(("cache-main",pid=1367,fd=34))
LISTEN 0      128       [::]:3306 [::]:* users:(("mysqld",pid=1367,fd=34))
LISTEN 0      128       [::]:8080 [::]:* users:(("httpd",pid=1363,fd=4),("httpd",pid=1362,fd=4),("httpd",pid=1361,fd=4),("httpd",pid=1360,fd=4),("httpd",pid=1359,fd=4),("httpd",pid=1081,fd=4))

Tester :

Vous pouvez tester le fonctionnement avec la commande curl :

[root@srv ~]# curl -I http://www.sysreseau.lan
HTTP/1.1 200 OK
date: Thu, 15 Oct 2020 21:50:52 GMT
server: Apache
Last-Modified: Mon, 12 Oct 2020 12:25:20 GMT
Content-Length: 25
content-type: text/html; charset=iso-8859-1
X-Varnish: 43
Age: 0
Via: 1.1 varnish (Varnish/6.0)
Accept-Ranges: bytes
Connextion: Keep-alive

Et voilà tout fonctionne très bien, Vous avez installé Varnish cache avec succès pour accélérer le contenu de votre site web.