Configureer Varnish Cache Server op CentOS 7

Estimated reading time: 6 min

Introductie

Varnish is een opensource accelerator software voor websites en API’s. Varnish is erg snel in het verwerken van de opgeroepen pagina’s, omdat alle gegevens in het interne geheugen worden opgeslagen en vanuit het geheugen worden bediend. Doordat de harde-schijven niet zijn betrokken bij het proces wordt de performance aanzienlijk verbeterd (tot wel 300+ keer). Het is de bedoeling dat Varnish wordt geïnstalleerd als omgekeerde proxy voor webservers die op HTTP draaien. Varnish heeft zijn eigen configuratietaal om beleid te schrijven voor inkomende aanvragen zoals back-end servers, ACL’s, reacties, etc.

In deze tutorial gaan we Varnish 6.2 installeren op CentOS 7. We gaan Apache instellen als back-end server die zal luisteren naar poort 8080 en Varnish zal standaard luisteren naar HTTP-poort 80. We gaan er ook voor zorgen dat Nginx luistert naar poort 443 voor SSL-beëindigingen. Varnish ondersteunt geen SSL-verbindingen. Nginx werkt daarom als een SSL reverse proxy voor Varnish

Vereisten

  • Cloud VPS of Dedicated Server met minimaal 1GB RAM en CentOS 7 installatie.
  • Je moet ingelogd zijn via SSH als sudo of root gebruiker. In deze tutorial gaan we er van uit dat je ingelogd bent als sudo gebruiker. 
  • Een domeinnaam die verwijst naar jour server als je gebruikt wil maken van SSL. In deze tutorial gebruiken we example.com als een voorbeeld domeinnaam. Zorg ervoor dat je example.com vervangt met je eigen domeinnaam. 

Stap 1: Systeem updaten

Begin eerst met het updaten van jouw systeem. Installeer de laatste pakketten en beveiligingspatches door het onderstaande commando uit te voeren.

sudo yum -y update

Stap 2:  Varnish YUM Repository instellen

Varnish kan op verschillende manieren geïnstalleerd worden, je kunt het installeren via het RPM-pakket van EPEL of compileren vanaf de bron.

In deze tutorial installeren we Varnish met we het pakket cloud repo, omdat het beschikt over de laatste versie van de applicatie en regelmatig wordt onderhouden door de makers van de applicatie. Zorg ervoor dat je PyGPGME installeert om er zeker van te zijn dat je alleen het geverifieerde pakket installeert.

sudo yum -y install pygpgme yum-utils

Installeer ook de EPEL-repository omdat sommige dependencies alleen daar beschikbaar zijn.

sudo yum -y install epel-release

Voer nu met het onderstaande commando de Package cloud repository setup script uit.

curl -s https://packagecloud.io/install/repositories/varnishcache/varnish62/script.rpm.sh | sudo bash

Stap 3: Installeer Varnish

Installeer Varnish door het onderstaande commando uit te voeren.

sudo yum -y install varnish

Na een succesvolle installatie kun je de versie van de Varnish cache server controleren door het onderstaande commando uit te voeren.

varnishd -V

Je zou een vergelijkbare output moeten zien als hieronder. 

[[email protected] ~]$ varnishd -V
varnishd (varnish-6.2.0 revision b14a3d38dbe918ad50d3838b11aa596f42179b54)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2019 Varnish Software AS

Varnish is nu op jouw server geïnstalleerd. Laten we doorgaan met de configuratie zodat je het ook kunt gebruiken. 

Om de setup van Varnish te testen, installeren we Apache webserver op dezelfde server.  We zetten Varnish in als reverse proxy en zorgen ervoor dat het luister naar poort 80, we zorgen er vervolgens voor dat Apache luistert naar poort 8080. Wanneer een aanvraag voor een webpagina op Poort 80 binnenkomt, en als de bron beschikbaar is in de cache, dan zal Varnish dat rechtstreeks vanuit het geheugen laden Mocht dit niet gebeuren, dan wordt het verzoek doorgestuurd naar de back-end-server, in ons geval is dat Apache op poort 8080.

Stap 4: Installeer Apache

Voer het onderstaande commando uit op de Apache webserver te installeren.

sudo yum -y install httpd

Wijzig het Apache configuratiebestand door het onderstaande commando uit te voeren.

sudo vi /etc/httpd/conf/httpd.conf

Zoek regel nummer 42 en geeft de opdracht Listen 80 verander het poortnummer naar 8080 zoals hieronder.

#
#Listen 12.34.56.78:80
Listen 8080

#
# Dynamic Shared Object (DSO) Support

Herstart Apache webserver zodat de wijzigingen worden doorgevoerd.

sudo systemctl restart httpd

Je kunt het onderstaande commando uitvoeren als je wilt dat Apache automatisch start tijdens het booten. 

sudo systemctl enable httpd

Voer de onderstaande commando’s uit om de firewall te configureren op poort 80, 443 en 8080. 

sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

Je kunt nu http://192.168.0.101:8080 bezoeken om de standaard Apache webpagina te bekijken. Zorg ervoor dat je dit IP-adres 192.168.0.101 vervangt met je eigen IP-adres.

Apache Default Page

Yes! Onze Apache-server draait nu op poort 8080. Laten we nu Varnish configureren met de back-end van Apache. Zodra je hebt getest of Apache werkt, kun je poort 8080 sluiten. Het is namelijk niet aanbevolen om onnodige poorten op internet te onthullen.

sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload

Stap 5: Configureer Varnish

Varnish luistert standaard naar 6081. Laten we poort 80 wijzigen, omdat poort 80 de standaard HTTP-poort is. Bewerk het Varnish Systemd-servicebestand.

sudo vi /usr/lib/systemd/system/varnish.service

Zoek de volgende regel op regelnummer 24.

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

Verander poort 6081 naar 80 zoals hieronder.

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

Als je extra geheugen op jouw server hebt, kun je ook de maximale hoeveelheid geheugen voor caching verhogen door 256mte vergroten. Sla het bestand op en verlaat de editor.

Varnish configuratie wordt gedaan in VCL of  Varnish Configuration Language. Varnish plaatst standaard een voorbeeld configuratiebestand in /etc/varnish/default.vcl. De back-end is al geconfigureerd als 8080 op localhost. Als je wilt, kun je het configuratiebestand snel bekijken door het te openen in de editor.

sudo vi /etc/varnish/default.vcl

Bekijk de onderstaande configuratie.

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

De standaard back-end luistert naar poort 8080 op localhost. Verlaat de editor zonder wijzigingen aan te brengen.

Zodra je klaar bent kun je Varnish herstarten kun je ervoor zorgen dat het automatisch wordt ingeschakeld tijdens het opstarten.

sudo systemctl restart varnish
sudo systemctl enable varnish

Als je nu naar http://192.168.0.101, gaat zie dezelfde HTTP webpagina. Om te bevestigen dat het met Varnish is verzonden voer je het onderstaande commando uit.

curl -I  http://192.168.0.101/

Je ziet nu de volgende output.

[[email protected] ~]$ curl -I  http://192.168.0.101/
HTTP/1.1 403 Forbidden
Date: Fri, 17 May 2019 10:12:52 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
ETag: "1321-5058a1e728280"
Accept-Ranges: bytes
Content-Length: 4897
Content-Type: text/html; charset=UTF-8
X-Varnish: 65557
Age: 0
Via: 1.1 varnish (Varnish/6.2)
Connection: keep-alive

Houd de parameters X-Varnish en Via in de gaten. Deze parameters geven aan dat de webpagina is verzonden met behulp van Varnish. We hebben een 403-reactiecode ontvangen omdat we geen webpagina hebben in de /var/www/html/directory.

Stap 6: Installeer Nginx

Aangezien Varnish geen SSL ondersteunt, moeten we een andere webserver gebruiken die naar SSL-verbindingen luistert. In deze tutorial gebruiken we Nginx om SSL-verbindingen op poort 443 af te handelen.

Wanneer er een verzoek wordt gestuurd naar poort 443, stuurt Nginx het door naar Varnish op poort 80. Als Varnish de bron in de cache heeft, zal deze rechtstreeks met de bron op Nginx antwoorden en Nginx zal uiteindelijk de client beantwoorden op dezelfde HTTPS-verbinding. Als de bron niet in het cachegeheugen van Varnish is opgeslagen, wordt het verzoek doorgestuurd naar de backend van Apache, en zodra Apache met de bron heeft gereageerd wordt Nginx beantwoord.

Voer het onderstaande commando uit om Nginx the installeren.

sudo yum -y install nginx

Stap 6: Genereer Let’s Encrypt SSL Certificaten

Omdat we de EPEL-repository al hebben geïnstalleerd, kunnen we Certbot rechtstreeks installeren met behulp van het onderstaande commando.

sudo yum -y install certbot

Certbot is een zeer populaire client om Let’s Encrypt certificaten te genereren.Apache is standaard geconfigureerd om websites te bedienen die zich bevinden op /var/www/html. We gebruiken deze locatie als onze webroot-map om de certificaten te genereren. Als u uw website op een andere locatie hebt geïnstalleerd, vervang je e /var/www/html met de daadwerkelijke pad van je webroot.

Aandachtspunt: De domein die je gebruikt moet verwijzen naar jouw Cloud VPS of dedicated server. Let’s’s Encrypt verifieert dit alvorens de certificaten worden uitgegeven.

Voer het onderstaande commando uit om de certificaten te genereren.

sudo certbot certonly --webroot -w /var/www/html -d example.com

Je wordt nu gevraagd om een e-mailadres op te geven voor verlenging notificaties. Je wordt ook gevraagd om de algemene voorwaarden te accepteren. Nadat certificaten zijn verkregen, wordt de privé sleutel opgeslagen
in /etc/letsencrypt/live/example.com/privkey.pem en het certificaat wordt opgeslagen in/etc/letsencrypt/live/example.com/fullchain.pem.

Doordat Let’s Encrypt certificaten binnen 90 dagen verlopen moeten we ook automatische verlengingen configureren. Open  de crontab voor root door het onderstaande commando uit te voeren.

sudo crontab -e

Vul de volgende regel in de editor.

0 4 * * * /usr/bin/certbot renew --post-hook "systemctl restart nginx"

Het bovenstaande commando zal jouw certificaten elke dag om 16.00 uur automatisch verlengen. Als de certificaten niet verlengd hoeven te worden dan wordt er niets uitgevoerd.

Stap 8: Configureer Nginx

Nu we de certificaten hebben gegenereerd, kunnen we verder met de configuratie van Nginx. 

Op het Nginx configuratiebestand door het onderstaande commando uit te voeren. 

sudo vi /etc/nginx/nginx.conf

In regelnummer 38 tot 57 vindt je een serverblok dat is geconfigureerd om te luisteren naar poort 80. Nginx hoeft niet te luisteren naar poort 80, omdat de Varnish configuratie al luistert naar poort 80. Vervang het hele serverblok met de onderstaande configuratie.

server {
        listen 443 ssl;

        server_name example.com;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        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;
        }
}

Sla het bestand op en verlaat de editor. Start alle Web Server-gerelateerde services opnieuw zodat onze wijzigingen van kracht worden.

sudo systemctl restart varnish
sudo systemctl restart httpd
sudo systemctl restart nginx

Je kunt testen of de SSL werkt op jouw site door te browsen naar https://example.com/. Als je zeker wilt zijn of webpagina daadwerkelijk via Varnish wordt verzonden dan kun je onderstaande commando uitvoeren op de terminal. 

curl -I https://example.com/

Je zou een soortgelijke output moeten zien als hieronder. Let op de parameters X-Varnish en Via . Deze parameters vertellen ons of de webpagina daadwerkelijk wordt verzonden met behulp van Varnish. 

[[email protected] ~]$ curl -I https://example.com/
HTTP/1.1 403 Forbidden
Server: nginx/1.12.2
Date: Mon, 20 May 2019 06:24:07 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 4897
Connection: keep-alive
Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
ETag: "1321-5058a1e728280"
Accept-Ranges: bytes
X-Varnish: 65555
Age: 0
Via: 1.1 varnish (Varnish/6.2)

Conclusie

In deze tutorial hebben we geleerd hoe we een Varnish caches server op CentOS 7 kunnen installeren. We hebben ook Apache geïnstalleerd als back-end voor  Varnish server. Daarnaast hebben Varnish geconfigureerd en ervoor gezorgd dat het luistert naar poort 80 als standaard webserver. We hebben ook SSL op onze website geactiveerd met behulp van Let’s Encrypt en Nginx reverse proxy. die luistert naar poort 443.

 

Was this article helpful?
Dislike 0
Views: 295

Lees Interacties

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

snel-knowledgebase-image