Configure and use Varnish (TM)

Varnish ™ is a web application accelerator (also known as a caching HTTP reverse proxy) that is installed and configured in front of any HTTP server and takes care of caching its contents. Varnish ™ is fast, typically speeding up delivery with a factor of 300-1000x depending on the architecture.

Varnish ™ requires a working compiler (such as gcc) to compile its configuration file, which is then dynamically linked into the server process.

Enable Varnish ™

Varnish ™ is disabled by default, so it cannot be started using the control script. To enable it, follow the steps below:

Since Varnish ™ with PageSpeed is not currently supported by Bitnami, ensure PageSpeed is disabled. Follow this guide for more information on this.

Start Varnish ™

By default, Varnish ™ is configured to use the first free port after the selected Apache port. This should be enough to do a preliminary test and check all is in place. Follow these steps:

Execute these commands at the server console:

$ /opt/bitnami/ctlscript.sh start varnish

Ensure Apache is running:

$ /opt/bitnami/ctlscript.sh start apache

Now you should be able to access the index page on both ports 80 and 81.

Accessing the server through the 80 port will behave as if Varnish ™ were not enabled, retrieving all the data from the server.

Accessing the server through the 81 port will use Varnish ™ as a reverse proxy, serving cached contents and requesting Apache for non-cached content.

Check Varnish ™ status

Check what Varnish ™ is doing under the hood with the varnishlog command. To indicate which instance of Varnish ™ you are interested in, specify the Varnish ™ working directory which is located by default at /opt/bitnami/varnish/var/varnish/.

To get a clearer idea of what is happening, use the varnishstat command instead:

NAME

CURRENT

CHANGE

AVERAGE

AVG_10

AVG_100

AVG_1000

MGT.uptime

0+00:07:02

MAIN.uptime

0+00:07:03

MAIN.sess_conn

8

0.00

0.02

0.03

0.01

0.01

MAIN.client_req

197

0.00

0.47

0.03

0.01

0.01

MAIN.cache_miss

7

0.00

0.02

0.03

0.01

0.01

The command shows much more information but a clear indication of whether it is working can be obtained by checking the MAIN.backend_reuse (how often Varnish ™ finds the contents in its cache) and the MAIN.cache_miss (how many times it failed and had to contact the web server).

After browsing the site for a while, you may find something like the below:

NAME

CURRENT

CHANGE

AVERAGE

AVG_10

AVG_100

AVG_1000

MGT.uptime

0+00:19:34

MAIN.uptime

0+00:19:35

MAIN.sess_conn

26

0.00

0.03

0.00

0.08

0.03

MAIN.client_req

593

0.00

0.63

0.04

1.77

0.65

MAIN.cache_hit

6

0.00

0.01

0.00

0.03

0.03

MAIN.cache_hit_grace

3

0.00

0.00

0.00

0.00

0.00

MAIN.cache_miss

12

0.00

0.01

0.00

0.02

0.01

MAIN.backend_conn

21

0.00

0.02

0.00

0.05

0.02

MAIN.backend_reuse

569

0.00

0.60

0.04

1.70

0.62

Disable Varnish ™

In some cases it is necessary to disable Varnish ™. One example would be when trying to force HTTPS redirection with Apache (although you can also configure Varnish ™ with SSL).

IMPORTANT: Before disabling Varnish ™ make sure that all services are stopped and that Apache is running on port 80 as described in the Varnish ™ guide.

Configure the application to use the correct domain name. The steps to do this will vary for each application. As an example, if you are using WordPress, you would need to follow these steps.

Modify the /opt/bitnami/apps/APPNAME/conf/httpd-prefix.conf file and add the following line at the top of the file.

SetEnvIf x-forwarded-proto https HTTPS=on

In some cases, it is also necessary to modify the Bitnami application configuration to automatically redirects all HTTP traffic to the HTTPS port. The procedure to do this varies per application: some applications may require you to manually edit a configuration file, others may provide an administration interface, and still others may not require any specific changes.

As an example, if you are using WordPress, you would need to edit the /opt/bitnami/apps/wordpress/htdocs/wp-config.php file and add the lines below before the WP_HOME and WP_SITEURL definitions:

Customize Varnish ™

Varnish ™ is installed with a default configuration file, agnostic to the Web application being cached. Using this configuration file, although achieving high performance, could lead to some content not being properly refreshed in the Varnish ™ cache. As a result, users would see an outdated version of the site.

The solution is to use a custom VCL configuration file. There are multiple sources on the Internet that provide customized configuration files for different applications. A good source is the Varnish ™ example page.

This section discusses how to change the default configuration file to a WordPress-specific one. Follow the steps below:

The file requires some modification to register the port on which your Apache server will be running. This port can be read either from the Apache configuration file at /opt/bitnami/apache2/conf/httpd.conf in the Listen directive:

With this value (80), edit the downloaded file and update the section below with the port number:

backend default {
.host = "127.0.0.1";
.port = "81";
}

NOTE: For Bitnami stacks, Varnish ™ is installed on the same server as Apache so the host can be configured as 127.0.0.1. You can also use Varnish ™ to cache a remote server, by providing the host’s IP address.

Copy the file to the Varnish ™ directory:

$ cp /path/to/the/wordpress.vcl /opt/bitnami/varnish/etc/varnish/

Stop Varnish ™:

$ cd /opt/bitnami
$ ./ctlscript.sh stop varnish

Modify the Varnish ™ control scripts to load the appropriate file. Edit the file /opt/bitnami/varnish/scripts/ctl.sh and change the VARNISH_CONFIG_FILE variable to point to the new file:

The configuration of the ports will involve first changing the Apache port and then the Varnish ™ port. Move Apache to a different port, by editing the Listen directive in the Apache configuration file at /opt/bitnami/apache2/conf/httpd.conf. Find the lines below:

Update your application configuration for Apache. For example, if your applications are configured for virtual hosting, change the port in the application configuration file for Apache as well as in the file at /opt/bitnami/apps/APP-NAME/conf/httpd-vhosts.conf. To know which applications are running under virtual hosts, check the file at /opt/bitnami/apache2/conf/bitnami/bitnami-apps-vhosts.conf, as this file contains the list of applications that you need to update, if any.

Configure Varnish ™ to use the old Apache port (80) and specify the new port for Apache (81) in the configuration file. Edit the file at /opt/bitnami/varnish/scripts/ctl.sh and update it so that it looks like this:

Block specified URLs from being cached by Varnish ™

It is advisable to block phpMyAdmin, phpPgAdmin and/or server-status from being cached and public. To do this. add the following lines of code to the end of the default Varnish ™ configuration file at /opt/bitnami/varnish/etc/varnish/default.vcl or in the Varnish ™ configuration file for your application: