Varnish Cache is a web accelerator, sometimes referred to as a HTTP accelerator or a reverse HTTP proxy, that will significantly enhance your web performance.
Varnish speeds up a website by storing a copy of the page served by the web server the first time a user visits that page. The next time a user requests the same page, Varnish will serve the copy instead of requesting the page from the web server.
This means that your web server needs to handle less traffic and your website’s performance and scalability go through the roof. Varnish cache will increase the delivery of your web content by 80 % or more, depending on your architecture.
Install Varnish Cache On Debian 7
Normally Varnish Cache is available on Debian default repositories. But i suggest you to use Varnish Cache repositories to get latest version of Varnish Cache.
Run the following commands as root user to install Varnish Cache.
# curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add - # echo "deb http://repo.varnish-cache.org/debian/ wheezy varnish-3.0" >> /etc/apt/sources.list # apt-get update # apt-get install varnish
Configure Varnish
Open up the file ‘/etc/default/varnish’ in any editor.
# nano /etc/default/varnish
Find the section called ‘Alternative -2’ and modify as shown below.
## Alternative 2, Configuration with VCL
#
# Listen on port 6081, administration on localhost:6082, and forward to
# one content server selected by the vcl file, based on the request. Use a 1GB
# fixed-size cache file.
#
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"
Save and exit the file.
Now we have to tell to varnish where to look the webserver content.
Open the file ‘/etc/varnish/default.vcl’.
# nano /etc/varnish/default.vcl
and make sure that you have the following lines in the file as shown below.
backend default {
.host = "127.0.0.1";
.port = "8080";
}
Configure Apache
We have told varnish that apache will be running on port 8080. But we haven’t change the port to 8080 and still apache listens on port 80.
To change the port, edit up the following file.
# nano /etc/apache2/ports.conf
Find the following lines,
NameVirtualHost *:80 Listen 80
Change them to look like below.
NameVirtualHost 127.0.0.1:8080 Listen 127.0.0.1:8080
Save and close the file.
Also edit the file ‘/etc/apache2/sites-available/default’,
# nano /etc/apache2/sites-available/default
Change the port to 8080.
<VirtualHost *:8080> ServerAdmin webmaster@localhost
Save and exit file. Restart apache and varnish services to take effect the saved changes.
# /etc/init.d/apache2 restart # /etc/init.d/varnish restart
Test Varnish
Now test Varnish cache is working with your webserver. Here my apache server hostname is server.unixmen.com. So i entered the following command to verify that varnish is working.
# curl -I server.unixmen.com
Sample output:
HTTP/1.1 200 OK Server: Apache/2.2.22 (Debian) Last-Modified: Tue, 23 Jul 2013 06:10:07 GMT ETag: "bfbbf-b1-4e227a5086e47" Vary: Accept-Encoding Content-Type: text/html Date: Sat, 24 Aug 2013 08:46:32 GMT X-Varnish: 2122861446 Age: 0 Via: 1.1 varnish Connection: keep-alive
As you see in the above output, varnish cache is working well with my apache server.
You can see the Varnish Cache status with following command.
# varnishstat
Sample output:
0+00:19:55 Hitrate ratio: 1 1 1 Hitrate avg: 0.2500 0.2500 0.2500 3 0.00 0.00 client_conn - Client connections accepted 4 0.00 0.00 client_req - Client requests received 1 0.00 0.00 cache_hit - Cache hits 3 0.00 0.00 cache_miss - Cache misses 2 0.00 0.00 backend_conn - Backend conn. success 1 0.00 0.00 backend_reuse - Backend conn. reuses 1 0.00 0.00 backend_toolate - Backend conn. was closed 3 0.00 0.00 backend_recycle - Backend conn. recycles 3 0.00 0.00 fetch_length - Fetch with Length 6 . . n_sess_mem - N struct sess_mem 2 . . n_waitinglist - N struct waitinglist 1 . . n_vbc - N struct vbc 10 . . n_wrk - N worker threads 12 0.00 0.01 n_wrk_create - N worker threads created 1 . . n_backend - N backends 3 . . n_expired - N expired objects 3 0.00 0.00 n_objwrite - Objects sent with write 3 0.00 0.00 s_sess - Total Sessions 4 0.00 0.00 s_req - Total Requests 3 0.00 0.00 s_fetch - Total fetch 1258 0.00 1.05 s_hdrbytes - Total header bytes 626 0.00 0.52 s_bodybytes - Total body bytes 1 0.00 0.00 sess_closed - Session Closed 4 0.00 0.00 sess_linger - Session Linger 3 0.00 0.00 sess_herd - Session herd 1094 0.00 0.92 shm_records - SHM records 843 0.00 0.71 shm_writes - SHM writes 3 0.00 0.00 backend_req - Backend requests made 1 0.00 0.00 n_vcl - N vcl total 1 0.00 0.00 n_vcl_avail - N vcl available 1 . . n_ban - N total active bans 1 . . n_ban_gone - N total gone bans 1 0.00 0.00 n_ban_add - N new bans added 4 0.00 0.00 hcb_nolock - HCB Lookups without lock 3 0.00 0.00 hcb_lock - HCB Lookups with lock 3 0.00 0.00 hcb_insert - HCB Inserts 1195 0.99 1.00 uptime - Client uptime 3 0.00 0.00 n_gunzip - Gunzip operations
For further reading about Varnish Cache, i recommended you to visit the official help documentation.