As you know, Magento 2 isn’t the fastest ecommerce framework. That’s why you need to cache everything to handle lots of traffic.
Your question – how to do that?
My answer – Varnish. So what is Varnish Cache, exactly?
It is an HTTP accelerator, designed for heavy dynamic websites. A main advantage behind the Varnish Cache in Magento 2 is that your server shouldn’t regenerate the products on category page from database every time it’s accessed.
But as you probably know, Varnish works with HTTP and doesn’t support HTTPS. But don’t despair, we will show you how to configure Varnish Cache with your Magento 2 using NGINX.
In this tutorial, we’ll show you how to install and configure Varnish Cache 6 with Nginx and LetsEncrypt SSL certificate on Ubuntu OS for Magento 2 Open Source.
Of course just like in previous tutorial about Magento Installation, you need a VPS server with ssh access. We’ll use the Digital Ocean.
Install Varnish cache
We’ll install Varnish Cache repo automatically by running bash script from packagecloud.io
$ curl -s https://packagecloud.io/install/repositories/varnishcache/varnish64/script.deb.sh | sudo bash
This command will check your system ability to install varnish and then will add a repository with the latest Varnish package. After this script is done you able to check:
$ cat /etc/apt/sources.list.d/varnishcache_varnish64.list
You should see something like this
Well, now you can install Varnish Cache to your server. Let’s do that with the following command:
$ sudo apt -y install varnish autoconf automake libtool varnish-dev libmaxminddb-dev python-docutils
Please note, all commands you should run like a sudo user.
Here you go! Varnish cache is installed to your server.
Check it out:
$ systemctl start varnish
$ systemctl status varnish
If status is active please go ahead.
Configure Magento to use Varnish Cache for Full page cache
Go to your admin panel Stores -> Settings Configuration -> Advanced tab -> System
Here find Full Page Cache tab and click to expand. In Caching Application choose Varnish and then click to Varnish Configuration.
Add the same settings like in screenshot:
Click to Export VCL for Varnish 6.
File default.vcl must be downloaded to your pc.
Now you have to go to your server and backup varnish settings.
$ mv /etc/varnish/default.vcl /etc/varnish/default.vcl.BACK
Now upload default.vcl which was downloaded from your magento admin panel.
Now we need to change the port. By default Varnish cache listening a :6081 port. But we need :80 port and nginx at :8080
So first of all lets edit Varnish configuration.
$ systemctl edit --full varnish
Now you can see systemd settings for Varnish Cache.
In the bottom find
ExecStart=/usr/sbin/varnishd -a :6081 -f /etc/varnish/default.vcl -s malloc,256m
And change :6081 port to :80 like this
ExecStart=/usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m
Save and close it.
$ systemctl daemon-reload
Now you have to go to nginx settings and edit:
$ vi /etc/nginx/conf.d/magento.conf
And change listen 80; to listen 8080;
server {
listen 8080;
server_name www.yoursite.com;
set $MAGE_ROOT /var/www/yoursite;
set $MAGE_RUN_TYPE website;
set $MAGE_MODE developer;
include /var/www/yoursite/nginx.conf.sample;
}
Save and close.
$ systemctl restart nginx
$ systemctl restart varnish
Now your nginx should listen 8080 port and varnish 80 port.
Configure Varnish, Nginx and SSL
Now I guess you have a ssl certificate and ready to use it.
So just go again to nginx settings:
$ vi /etc/nginx/conf.d/magento.conf
After the first server block add a new one.
server {
listen 8080;
server_name www.yoursite.com;
set $MAGE_ROOT /var/www/yoursite;
set $MAGE_RUN_TYPE website;
set $MAGE_MODE developer;
include /var/www/yoursite/nginx.conf.sample;
}
server {
server_name www.yoursite.com;
listen 443 ssl http2;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_dhparam /path/to/dhparam.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
location / {
proxy_pass http://127.0.0.1;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $http_host;
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_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
}
}
Save and close.
$ systemctl start varnish
$ systemctl status varnish
The main thing there is a location block which contains some proxy settings which allow to use a ssl with Varnish Cache.
Well, if everything is ok, your Magento 2 must be running with Varnish Cache.
Getting Started with Magento 2
In the Getting Started with Magento 2 you will learn how to install Magento 2 Open Source on your environment.