Difference between revisions of "Package:Varnish"

m (update since package had broken previous configuration syntax, and setup.)
m (add some c10k garbage)
 
(4 intermediate revisions by 2 users not shown)
Line 10: Line 10:
 
===Emerge===
 
===Emerge===
  
Install {{Package|www-servers/varnish}}
+
Install {{Package|www-servers/varnish}}:
<console>###i## www-servers/varnish</console>
+
<console>###i## emerge www-servers/varnish</console>
  
 
==Configuration==
 
==Configuration==
Line 34: Line 34:
  
 
Varnish will fetch data from localhost:8080 and serve accelerated proxy data on localhost:80
 
Varnish will fetch data from localhost:8080 and serve accelerated proxy data on localhost:80
 +
 +
=== c10k ===
 +
For 10,000 concurrent connections (or not) a few configuration settings control the power of varnish.  If you're having varnish directly serve to the outside world, dial back concurrency to say 50 or 100 connections per ip. You must take into account corporations, and universities hammering several connections from a singular ip.  c10k is useful information for if varnish is behind a load balancer such as pound, nginx, or tengine, and all requests are internal and local.
 +
 +
{{file|name=/etc/conf.d/varnishd|desc=varnish concurrency settings|body=
 +
VARNISHD_OPTS="-a 127.0.0.1:80 -p thread_pool_min=20 -p thread_pool_max=1000 -p thread_pool_add_delay=2 -s malloc,700M"
 +
}}
 +
 +
{{file|name=/etc/varnish/default.vcl|desc=varnish concurrency settings|body=
 +
backend default {
 +
    .host = "127.0.0.1";
 +
    .port = "8080";
 +
    .connect_timeout = 600s;
 +
    .first_byte_timeout = 600s;
 +
    .between_bytes_timeout = 600s;
 +
    .max_connections = 10000;
 +
    # .port = "80" led to issues with competing for the port with apache.
 +
}
 +
}}
  
 
== BootService ==
 
== BootService ==
Line 47: Line 66:
 
<console>$##i## curl -I https://www.varnish-cache.org/</console>
 
<console>$##i## curl -I https://www.varnish-cache.org/</console>
  
[[Category:Server]]
+
== Benchmarking ==
[[Category:Daemons]]
+
If your system has apache installed apache benchmark can show the power of varnish.  The examples shown are running 500 requests with concurrency of 100 hits.
 +
 
 +
 
 +
ab against a 3 worker cluster mode puma server
 +
<console>###i## ab -n 500 -c 100 http://127.0.0.1:3000/index.html | grep Request</console>
 +
Requests per second:    110.92 [#/sec] (mean)
 +
 
 +
 
 +
ab against the same server served through varnish
 +
<console>###i## ab -n 500 -c 100 http://127.0.0.1/index.html | grep Request</console>
 +
Requests per second:    10268.42 [#/sec] (mean)
 +
 
 +
== SSL support ==
 +
Varnish does not support ssl.  There are packages to get around this limitation:
 +
* {{package|stunnel}}
 +
* {{package|pound}}
 +
 
 +
== Media ==
 +
{{#widget:YouTube16x9|id=JEF6_XC-2ZU}}
  
 
{{EbuildFooter}}
 
{{EbuildFooter}}

Latest revision as of 05:13, November 16, 2014

www-servers/varnish


Source Repository:Gentoo Portage Tree

Summary: Varnish is a state-of-the-art, high-performance HTTP accelerator

Varnish

Varnish is a webcache & http accelerator. Varnish will either serve cached content, or retireve content from the server, and cache it. Varnish will reduce I/O pressure from webservers.

Install

Emerge

Install Varnish:

# emerge www-servers/varnish

Configuration

Configuration is controlled by /etc/varnish/default.vcl & /etc/conf.d/varnishd

/etc/varnish/default.vcl: varnish configuration file
vcl 4.0;
backend default {
    .host = "127.0.0.1";
    .port = "8080";
}
/etc/conf.d/varnishd: varnish configuration file
VARNISHD="/usr/sbin/varnishd"
VARNISHADM="/usr/bin/varnishadm"
CONFIGFILE="/etc/varnish/default.vcl"
VARNISHD_OPTS="-a 127.0.0.1:80"
VARNISHD_OPTS="${VARNISHD_OPTS} -u varnish -g varnish"

Varnish will fetch data from localhost:8080 and serve accelerated proxy data on localhost:80

c10k

For 10,000 concurrent connections (or not) a few configuration settings control the power of varnish. If you're having varnish directly serve to the outside world, dial back concurrency to say 50 or 100 connections per ip. You must take into account corporations, and universities hammering several connections from a singular ip. c10k is useful information for if varnish is behind a load balancer such as pound, nginx, or tengine, and all requests are internal and local.

/etc/conf.d/varnishd: varnish concurrency settings
VARNISHD_OPTS="-a 127.0.0.1:80 -p thread_pool_min=20 -p thread_pool_max=1000 -p thread_pool_add_delay=2 -s malloc,700M"
/etc/varnish/default.vcl: varnish concurrency settings
backend default {
    .host = "127.0.0.1";
    .port = "8080";
    .connect_timeout = 600s;
    .first_byte_timeout = 600s;
    .between_bytes_timeout = 600s;
    .max_connections = 10000;
    # .port = "80" led to issues with competing for the port with apache.
}

BootService

To start varnish immediately:

# rc-service varnishd start

To start varnish at boot:

# rc-update add varnishd default

Verification

To verify that your traffic is going through varnish.

$ curl -I https://www.varnish-cache.org/

Benchmarking

If your system has apache installed apache benchmark can show the power of varnish. The examples shown are running 500 requests with concurrency of 100 hits.


ab against a 3 worker cluster mode puma server

# ab -n 500 -c 100 http://127.0.0.1:3000/index.html | grep Request

Requests per second: 110.92 [#/sec] (mean)


ab against the same server served through varnish

# ab -n 500 -c 100 http://127.0.0.1/index.html | grep Request

Requests per second: 10268.42 [#/sec] (mean)

SSL support

Varnish does not support ssl. There are packages to get around this limitation:

Media