Install And Configure Varnish Cache With Apache On Debian 7

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.