##1. Background
The assumptions are following:
- your Digital Ocean droplet LAMP has already been set up
- you know how to open ssh session to your droplet
- Symfony Standard default web page is already available at http://localhost/ within your droplet
If you need additional assistance to meet the above assumptions refer to:
- A tutorial on Installing ssh keys for Digital Ocean droplet
- A tutorial on Running Symfony application on Digital Ocean droplet
##2. Install lynx and visit the default web page
Install lynx:
$ sudo apt-get update -y
$ sudo apt-get install lynx-cur -y
and visit your web site:
$ lynx localhost
If you are using Symfony Standard, you should see the page containing two words:
                    Welcome!
Homepage.
You can quit lynx by pressing Q key on your keyboard.
##3. Install the software to benchmark your site
I will use ab application to benchmark the site.
To install it run:
$ sudo apt-get install apache2-utils -y
##4. Run the tests to check current speed of your site
$ ab -c 10 -n 1000 http://localhost/
The result you will get will be similar to:
Concurrency Level:      10
Time taken for tests:   9.432 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      525000 bytes
HTML transferred:       248000 bytes
Requests per second:    106.03 [#/sec] (mean)
Time per request:       94.316 [ms] (mean)
Time per request:       9.432 [ms] (mean, across all concurrent requests)
Transfer rate:          54.36 [Kbytes/sec] received
Thus, the current speed may be estimated as 100 requests per second.
##5. Install Varnish
$ sudo apt-get install varnish -y
##6. Configure Varnish
Modify the contents of /etc/default/varnish file.
Configure Varnish to respond to queries received on port 8080.
You can achieve this with the following settings:
# File: /etc/default/varnish
DAEMON_OPTS="-a :8080 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -s malloc,1024m"
Next modify the contents of /etc/varnish/devault.vcl file.
With the following settings Varnish will use Apache running on port 80:
# File: /etc/varnish/default.vcl
backend default {
    .host = "127.0.0.1";
    .port = "80";
}
##7. Restart varnish
$ sudo service varnish restart
##8. What have we just done?
Right now, your server listens for HTTP requests using two ports:
- 80 - standard port used by Apache
- 8080 - port used by Varnish
When Varnish receives a request for the first time, it contacts Apache to to get the answer. After that, Varnish responds with cached answer.
##9. Run the tests again
This time use port 8080 for tests:
$ ab -c 10 -n 1000 http://localhost:8080/
You should get results similar to the ones shown below:
Concurrency Level:      10
Time taken for tests:   0.165 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      538000 bytes
HTML transferred:       248000 bytes
Requests per second:    6070.87 [#/sec] (mean)
Time per request:       1.647 [ms] (mean)
Time per request:       0.165 [ms] (mean, across all concurrent requests)
Transfer rate:          3189.58 [Kbytes/sec] received
Now, the speed may be estimated as 6000 requests per second.
The difference is really amazing:
| Port | Content served by | queries/second | 
|---|---|---|
| 80 | Apache | 100 | 
| 8080 | Varnish | 6000 | 
##7. Reading list
