How to Install Varnish 7 for Nginx on Rocky Linux 8
Varnish cache is a free and open-source cache accelerator used to speed up your website by caching the content in memory. It is extremely fast and reduces the page load time, which helps with your SERPs and improves user experience. It is used by many organizations including Facebook, Twitter, and Wikipedia. Varnish sits between Nginx and clients that receive requests from clients and forwards them to the backend. This will improve the webserver performance because Varnish will serve content from memory.
In this tutorial, I will show you how to install Varnish 7 in front of Nginx on Rocky Linux 8.
Prerequisites
- A server running Rocky Linux 8.
- A root password is configured on the server.
Install Varnish 7
Before starting, you will need to disable the existing varnish modules from your system. You can disable it by running the following command:
dnf module disable varnish
You should see the following output:
============================================================================================================================================== Package Architecture Version Repository Size ============================================================================================================================================== Disabling modules: varnish Transaction Summary ============================================================================================================================================== Is this ok [y/N]: y Complete!
Next, install the EPEL repository using the following command:
dnf install epel-release -y
Next, add Varnish Cache 7 repository to your system using the following command:
curl -s https://packagecloud.io/install/repositories/varnishcache/varnish70/script.rpm.sh | bash
Once the repository is added, install the Varnish 7 using the following command:
dnf install varnish -y
After the successful installation, verify the information about Varnish with the following command:
rpm -qi varnish
You should see the following output:
Name : varnish Version : 7.0.2 Release : 1.el8 Architecture: x86_64 Install Date: Sunday 13 February 2022 06:24:35 AM UTC Group : System Environment/Daemons Size : 8907085 License : BSD Signature : (none) Source RPM : varnish-7.0.2-1.el8.src.rpm Build Date : Wednesday 12 January 2022 02:25:34 PM UTC Build Host : 7fc509e75620 Relocations : (not relocatable) URL : https://www.varnish-cache.org/ Summary : High-performance HTTP accelerator Description : This is Varnish Cache, a high-performance HTTP accelerator.
Manage Varnish Service
After installing Varnish, start the Varnish service and enable it to start at system reboot using the following command:
systemctl start varnish
systemctl enable varnish
You can check the status of the Varnish with the following command:
systemctl status varnish
You will get the following output:
? varnish.service - Varnish Cache, a high-performance HTTP accelerator Loaded: loaded (/usr/lib/systemd/system/varnish.service; disabled; vendor preset: disabled) Active: active (running) since Sun 2022-02-13 06:24:56 UTC; 6s ago Process: 2555 ExecStart=/usr/sbin/varnishd -a :6081 -a localhost:8443,PROXY -p feature=+http2 -f /etc/varnish/default.vcl -s malloc,256m (c> Main PID: 2556 (varnishd) Tasks: 217 Memory: 104.5M CGroup: /system.slice/varnish.service ??2556 /usr/sbin/varnishd -a :6081 -a localhost:8443,PROXY -p feature=+http2 -f /etc/varnish/default.vcl -s malloc,256m ??2567 /usr/sbin/varnishd -a :6081 -a localhost:8443,PROXY -p feature=+http2 -f /etc/varnish/default.vcl -s malloc,256m Feb 13 06:24:55 rockylinux systemd[1]: Starting Varnish Cache, a high-performance HTTP accelerator... Feb 13 06:24:55 rockylinux varnishd[2556]: Version: varnish-7.0.2 revision 9b5f68e19ca0ab60010641e305fd12822f18d42c Feb 13 06:24:55 rockylinux varnishd[2556]: Platform: Linux,4.18.0-348.12.2.el8_5.x86_64,x86_64,-junix,-smalloc,-sdefault,-hcritbit Feb 13 06:24:55 rockylinux varnishd[2556]: Child (2567) Started Feb 13 06:24:56 rockylinux varnishd[2556]: Child (2567) said Child starts Feb 13 06:24:56 rockylinux systemd[1]: Started Varnish Cache, a high-performance HTTP accelerator.
Configure Varnish
By default, Varnish listens on port 6081. Here, we will use Varnish to accept incoming HTTP connections. So you will need to configure Varnish to listen on port 80. You can do it by editing /usr/lib/systemd/system/varnish.service file:
nano /usr/lib/systemd/system/varnish.service
Change the port 6081 to 80 as shown below:
ExecStart=/usr/sbin/varnishd -a :80 -a localhost:8443,PROXY -p feature=+http2 -f /etc/varnish/default.vcl -s malloc,2g
Save and close the file then reload the systemd daemon to apply the changes:
systemctl daemon-reload
Next, restart the Varnish service to apply the changes:
systemctl restart varnish
Next, verify the Varnish listening port using the following command:
ss -antpl | grep varnish
You should see the Varnish listening port in the following output:
LISTEN 0 10 127.0.0.1:46093 0.0.0.0:* users:(("varnishd",pid=2819,fd=13)) LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("cache-main",pid=2830,fd=6),("varnishd",pid=2819,fd=6)) LISTEN 0 128 127.0.0.1:8443 0.0.0.0:* users:(("cache-main",pid=2830,fd=9),("varnishd",pid=2819,fd=9)) LISTEN 0 10 [::1]:33963 [::]:* users:(("varnishd",pid=2819,fd=12)) LISTEN 0 128 [::]:80 [::]:* users:(("cache-main",pid=2830,fd=7),("varnishd",pid=2819,fd=7)) LISTEN 0 128 [::1]:8443 [::]:* users:(("cache-main",pid=2830,fd=8),("varnishd",pid=2819,fd=8))
Configure Nginx to work with Varnish
In this section, we will install Nginx and configure it to work with Varnish. First, install the Nginx package with the following command:
dnf install nginx -y
After installing Nginx, you will need to edit the Nginx configuration file and change the Nginx default listening port from 80 to 8080.
Edit the Nginx main configuration file using the following command:
nano /etc/nginx/nginx.conf
Find the following lines:
listen 80 default_server; listen [::]:80 default_server;
And, replaced them with the following lines:
listen 8080 default_server; listen [::]:8080 default_server;
Save and close the file when you are finished then start the Nginx service to apply the changes:
systemctl start nginx
You can also check the Nginx status using the following command:
systemctl status nginx
You will get the following output:
? nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: active (running) since Sun 2022-02-13 06:29:02 UTC; 8s ago Process: 5627 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Process: 5626 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Process: 5624 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) Main PID: 5629 (nginx) Tasks: 2 (limit: 11412) Memory: 6.7M CGroup: /system.slice/nginx.service ??5629 nginx: master process /usr/sbin/nginx ??5630 nginx: worker process Feb 13 06:29:02 rockylinux systemd[1]: Starting The nginx HTTP and reverse proxy server... Feb 13 06:29:02 rockylinux nginx[5626]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok Feb 13 06:29:02 rockylinux nginx[5626]: nginx: configuration file /etc/nginx/nginx.conf test is successful Feb 13 06:29:02 rockylinux systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument Feb 13 06:29:02 rockylinux systemd[1]: Started The nginx HTTP and reverse proxy server.
Verify Varnish Cache
At this point, Varnish is installed and configured with the Nginx web server. Now, it's time to test the Varnish cache.
Run the following command to verify the Varnish cache:
curl -I http://your-server-ip
If everything is fine, you will get the following output:
HTTP/1.1 200 OK Server: nginx/1.14.1 Date: Sun, 13 Feb 2022 06:30:06 GMT Content-Type: text/html Content-Length: 3429 Last-Modified: Thu, 10 Jun 2021 09:09:03 GMT ETag: "60c1d6af-d65" X-Varnish: 2 Age: 0 Via: 1.1 varnish (Varnish/7.0) Accept-Ranges: bytes Connection: keep-alive
Conclusion
Congratulations! you have successfully installed Varnish with Nginx on Rocky Linux 8. You can now implement Varnish in the production environment to speed up your website performance. Feel free to ask me if you have any questions.