r5009 - in trunk/varnish-cache: doc/sphinx/reference man
kristian at varnish-cache.org
kristian at varnish-cache.org
Mon Jul 5 13:56:03 CEST 2010
Author: kristian
Date: 2010-07-05 13:56:03 +0200 (Mon, 05 Jul 2010)
New Revision: 5009
Removed:
trunk/varnish-cache/man/vcl.7so
Modified:
trunk/varnish-cache/doc/sphinx/reference/vcl.rst
trunk/varnish-cache/man/Makefile.am
Log:
generate vcl.7 from rst, include default.vcl in vcl.rst
Modified: trunk/varnish-cache/doc/sphinx/reference/vcl.rst
===================================================================
--- trunk/varnish-cache/doc/sphinx/reference/vcl.rst 2010-07-05 10:10:19 UTC (rev 5008)
+++ trunk/varnish-cache/doc/sphinx/reference/vcl.rst 2010-07-05 11:56:03 UTC (rev 5009)
@@ -583,106 +583,9 @@
.port = "http";
}
- sub vcl_recv {
- if (req.http.x-forwarded-for) {
- set req.http.X-Forwarded-For = req.http.X-Forwarded-For ", " client.ip;
- } else {
- set req.http.X-Forwarded-For = client.ip;
- }
-
- if (req.request != "GET" &&
- req.request != "HEAD" &&
- req.request != "PUT" &&
- req.request != "POST" &&
- req.request != "TRACE" &&
- req.request != "OPTIONS" &&
- req.request != "DELETE") {
- // Non-RFC2616 or CONNECT which is weird.
- return (pipe);
- }
- if (req.request != "GET" && req.request != "HEAD") {
- // We only deal with GET and HEAD by default
- return (pass);
- }
- if (req.http.Authorization || req.http.Cookie) {
- // Not cacheable by default
- return (pass);
- }
- return (lookup);
- }
-
- sub vcl_pipe {
- # Note that only the first request to the backend will have
- # X-Forwarded-For set. If you use X-Forwarded-For and want to
- # have it set for all requests, make sure to have:
- # set req.http.connection = "close";
- # here. It is not set by default as it might break some broken web
- # applications, like IIS with NTLM authentication.
- return (pipe);
- }
-
- sub vcl_pass {
- return (pass);
- }
+.. include:: ../../../man/default.vcl
+ :literal:
- sub vcl_hash {
- set req.hash += req.url;
- if (req.http.host) {
- set req.hash += req.http.host;
- } else {
- set req.hash += server.ip;
- }
- return (hash);
- }
-
- sub vcl_hit {
- if (!obj.cacheable) {
- return (pass);
- }
- return (deliver);
- }
-
- sub vcl_miss {
- return (fetch);
- }
-
- sub vcl_fetch {
- if (!beresp.cacheable) {
- return (pass);
- }
- if (beresp.http.Set-Cookie) {
- return (pass);
- }
- return (deliver);
- }
-
- sub vcl_deliver {
- return (deliver);
- }
-
- sub vcl_error {
- set obj.http.Content-Type = "text/html; charset=utf-8";
- synthetic {"
- <?xml version="1.0" encoding="utf-8"?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html>
- <head>
- <title>"} obj.status " " obj.response {"</title>
- </head>
- <body>
- <h1>Error "} obj.status " " obj.response {"</h1>
- <p>"} obj.response {"</p>
- <h3>Guru Meditation:</h3>
- <p>XID: "} req.xid {"</p>
- <hr>
- Varnish cache server
- </body>
- </html>
- "};
- return (deliver);
- }
-
The following example shows how to support multiple sites running on
separate backends in the same Varnish instance, by selecting backends
based on the request URL:::
Modified: trunk/varnish-cache/man/Makefile.am
===================================================================
--- trunk/varnish-cache/man/Makefile.am 2010-07-05 10:10:19 UTC (rev 5008)
+++ trunk/varnish-cache/man/Makefile.am 2010-07-05 11:56:03 UTC (rev 5009)
@@ -1,11 +1,20 @@
# $Id$
-EXTRA_DIST = vcl.7so
DISTCLEANFILES = vcl.7 default.vcl
+if HAVE_RST2MAN
dist_man_MANS = vcl.7
+endif
-vcl.7: vcl.7so default.vcl Makefile
- soelim $(srcdir)/vcl.7so > $@
default.vcl: $(top_srcdir)/bin/varnishd/default.vcl Makefile
sed -n '/vcl_recv/,$$p' $(top_srcdir)/bin/varnishd/default.vcl > $@
+
+vcl.7: ../doc/sphinx/reference/vcl.rst default.vcl
+if HAVE_RST2MAN
+ ${RST2MAN} $< >$@
+else
+ @echo "========================================"
+ @echo "You need rst2man installed to make dist"
+ @echo "========================================"
+ @false
+endif
Deleted: trunk/varnish-cache/man/vcl.7so
===================================================================
--- trunk/varnish-cache/man/vcl.7so 2010-07-05 10:10:19 UTC (rev 5008)
+++ trunk/varnish-cache/man/vcl.7so 2010-07-05 11:56:03 UTC (rev 5009)
@@ -1,752 +0,0 @@
-.\"-
-.\" Copyright (c) 2006 Verdens Gang AS
-.\" Copyright (c) 2006-2009 Linpro AS
-.\" All rights reserved.
-.\"
-.\" Author: Dag-Erling Smørgrav <des at des.no>
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" $Id$
-.\"
-.Dd August 10, 2007
-.Dt VCL 7
-.Os
-.Sh NAME
-.Nm VCL
-.Nd Varnish Configuration Language
-.Sh DESCRIPTION
-The
-.Nm
-language is a small domain-specific language designed to be used to
-define request handling and document caching policies for the Varnish
-HTTP accelerator.
-.Pp
-When a new configuration is loaded, the
-.Nm varnishd
-management process translates the VCL code to C and compiles it to a
-shared object which is then dynamically linked into the server
-process.
-.Ss Syntax
-The VCL syntax is very simple, and deliberately similar to C and Perl.
-Blocks are delimited by curly braces, statements end with semicolons,
-and comments may be written as in C, C++ or Perl according to your own
-preferences.
-.Pp
-In addition to the C-like assignment (=), comparison (==) and boolean
-(!, && and ||) operators, VCL supports regular expression and ACL
-matching using the ~ operator.
-.Pp
-Unlike C and Perl, the backslash (\e) character has no special meaning
-in strings in VCL, which use the (%xx) escape mechanism just like URLs,
-so it can be freely used in regular expressions without doubling.
-.Pp
-Strings are concatenated by just putting them one after each other
-without any operator in between.
-.Pp
-Assignments are introduced with the
-.Cm set
-keyword.
-There are no user-defined variables; values can only be assigned to
-variables attached to backend, request or document objects.
-Most of these are typed, and the values assigned to them must have a
-compatible unit suffix.
-.Pp
-VCL has
-.Cm if
-tests, but no loops.
-.Pp
-The contents of another VCL file may be inserted at any point in the
-code by using the
-.Cm include
-keyword followed by the name of the other file as a quoted string.
-.Ss Backend declarations
-A backend declaration creates and initializes a named backend object:
-.Bd -literal -offset 4n
-backend www {
- .host = "www.example.com";
- .port = "http";
-}
-.Ed
-.Pp
-The backend object can later be used to select a backend at request
-time:
-.Bd -literal -offset 4n
-if (req.http.host ~ "^(www\.)?example.com$") {
- set req.backend = www;
-}
-.Ed
-.Pp
-To avoid overloading backend servers,
-.Fa .max_connections
-can be set to limit the maximum number of concurrent backend connections.
-.Pp
-The timeout parameters can be overridden in the backend declaration.
-The timeout parameters are
-.Fa .connect_timeout
-for the time to wait for a backend connection,
-.Fa .first_byte_timeout
-for the time to wait for the first byte from the backend and
-.Fa .between_bytes_timeout
-for time to wait between each received byte.
-.Pp
-These can be set in the declaration like this:
-.Bd -literal -offset 4n
-backend www {
- .host = "www.example.com";
- .port = "http";
- .connect_timeout = 1s;
- .first_byte_timeout = 5s;
- .between_bytes_timeout = 2s;
-}
-.Ed
-.Pp
-To mark a backend as unhealthy after number of items have been added to
-it's saintmode list
-.Fa .saintmode_threshold
-can be set to the maximum list size. Setting a value of 0 disables
-saintmode checking entirely for that backend. The value in the backend
-declaration overrides the parameter.
-.Ss Directors
-Directors choose from different backends based on health status and a
-per-director algorithm.
-There currently exists a round-robin and a random director.
-.Pp
-Directors are defined using:
-.Bd -literal -offset 4n
-director b2 random {
- .retries = 5;
- {
- /* We can refer to named backends */
- .backend = b1;
- .weight = 7;
- }
- {
- /* Or define them inline */
- .backend = {
- .host = "fs2";
- }
- .weight = 3;
- }
-}
-.Ed
-.Ss The random director
-The random director takes one per-director option
-.Fa .retries .
-This specifies how many tries it will use to find a working backend.
-The default is the same as the number of backends defined for the
-director.
-.Pp
-There is also a per-backend option: weight which defines the portion
-of traffic to send to the particular backend.
-.Ss The round-robin director
-The round-robin does not take any options.
-.Ss Backend probes
-Backends can be probed to see whether they should be considered
-healthy or not. The return status can also be checked by using
-.Fa req.backend.healthy
-.
-.Fa .window
-is how many of the latest polls we examine, while
-.Fa .threshold
-is how many of those must have succeeded for us to consider the
-backend healthy.
-.Fa .initial
-is how many of the probes are considered good when Varnish starts -
-defaults to the same amount as the threshold.
-.Bd -literal -offset 4n
-backend www {
- .host = "www.example.com";
- .port = "http";
- .probe = {
- .url = "/test.jpg";
- .timeout = 0.3 s;
- .window = 8;
- .threshold = 3;
- .initial = 3;
- }
-}
-.Ed
-It is also possible to specify the raw HTTP request.
-.Bd -literal -offset 4n
-backend www {
- .host = "www.example.com";
- .port = "http";
- .probe = {
- # NB: \er\en automatically inserted after each string!
- .request =
- "GET / HTTP/1.1"
- "Host: www.foo.bar"
- "Connection: close";
- }
-}
-.Ed
-.Ss ACLs
-An ACL declaration creates and initializes a named access control list
-which can later be used to match client addresses:
-.Bd -literal -offset 4n
-acl local {
- "localhost"; /* myself */
- "192.0.2.0"/24; /* and everyone on the local network */
- ! "192.0.2.23"; /* except for the dialin router */
-}
-.Ed
-.Pp
-If an ACL entry specifies a host name which Varnish is unable to
-resolve, it will match any address it is compared to.
-Consequently, if it is preceded by a negation mark, it will reject any
-address it is compared to, which may not be what you intended.
-If the entry is enclosed in parentheses, however, it will simply be
-ignored.
-.Pp
-To match an IP address against an ACL, simply use the match operator:
-.Bd -literal -offset 4n
-if (client.ip ~ local) {
- pipe;
-}
-.Ed
-.Ss Grace
-If the backend takes a long time to generate an object there is a risk
-of a thread pile up.
-In order to prevent this you can enable grace.
-This allows varnish to serve an expired version of the object while a
-fresh object is being generated by the backend.
-.Pp
-The following vcl code will make Varnish serve expired objects.
-All object will be kept up to two minutes past their expiration time
-or a fresh object is generated.
-.Bd -literal -offset 4n
-sub vcl_recv {
- set req.grace = 2m;
-}
-sub vcl_fetch {
- set obj.grace = 2m;
-}
-.Ed
-.Ss Functions
-The following built-in functions are available:
-.Bl -tag -width indent
-.It Fn regsub "str" "regex" "sub"
-Returns a copy of
-.Fa str
-with the first occurrence of the regular expression
-.Fa regex
-replaced with
-.Fa sub .
-Within
-.Fa sub ,
-.Va \e0
-(which can also be spelled
-.Va & )
-is replaced with the entire matched string, and
-.Va \en
-is replaced with the contents of subgroup
-.Ar n
-in the matched string.
-.It Fn regsuball "str" "regex" "sub"
-As
-.Fn regsuball
-but this replaces all occurrences.
-.It Fn purge_url "regex"
-Purge all objects in cache whose URLs match
-.Fa regex .
-.El
-.Ss Subroutines
-A subroutine is used to group code for legibility or reusability:
-.Bd -literal -offset 4n
-sub pipe_if_local {
- if (client.ip ~ local) {
- pipe;
- }
-}
-.Ed
-.Pp
-Subroutines in VCL do not take arguments, nor do they return values.
-.Pp
-To call a subroutine, use the
-.Cm call
-keyword followed by the subroutine's name:
-.Bd -literal -offset 4n
-call pipe_if_local;
-.Ed
-.Pp
-There are a number of special subroutines which hook into the Varnish
-workflow.
-These subroutines may inspect and manipulate HTTP headers and various
-other aspects of each request, and to a certain extent decide how the
-request should be handled.
-Each subroutine terminates by calling one of a small number of
-keywords which indicates the desired outcome.
-.Bl -tag -width indent
-.\" vcl_recv
-.It Cm vcl_recv
-Called at the beginning of a request, after the complete request has
-been received and parsed.
-Its purpose is to decide whether or not to serve the request, how to
-do it, and, if applicable, which backend to use.
-.Pp
-The
-.Cm vcl_recv
-subroutine may terminate with one of the following keywords:
-.Bl -tag -width indent
-.It Cm error Ar code Op Ar reason
-Return the specified error code to the client and abandon the
-request.
-.It Cm pass
-Switch to pass mode.
-Control will eventually pass to
-.Cm vcl_pass .
-.It Cm pipe
-Switch to pipe mode.
-Control will eventually pass to
-.Cm vcl_pipe .
-.It Cm lookup
-Look up the requested object in the cache.
-Control will eventually pass to
-.Cm vcl_hit
-or
-.Cm vcl_miss ,
-depending on whether the object is in the cache.
-.El
-.\" vcl_pipe
-.It Cm vcl_pipe
-Called upon entering pipe mode.
-In this mode, the request is passed on to the backend, and any further
-data from either client or backend is passed on unaltered until either
-end closes the connection.
-.Pp
-The
-.Cm vcl_pipe
-subroutine may terminate with one of the following keywords:
-.Bl -tag -width indent
-.It Cm error Ar code Op Ar reason
-Return the specified error code to the client and abandon the
-request.
-.It Cm pipe
-Proceed with pipe mode.
-.El
-.\" vcl_pass
-.It Cm vcl_pass
-Called upon entering pass mode.
-In this mode, the request is passed on to the backend, and the
-backend's response is passed on to the client, but is not entered into
-the cache.
-Subsequent requests submitted over the same client connection are
-handled normally.
-.Pp
-The
-.Cm vcl_pass
-subroutine may terminate with one of the following keywords:
-.Bl -tag -width indent
-.It Cm error Ar code Op Ar reason
-Return the specified error code to the client and abandon the
-request.
-.It Cm pass
-Proceed with pass mode.
-.El
-.\" vcl_hash
-.It Cm vcl_hash
-Use
-.Cm req.hash += req.http.Cookie
-or similar to include the Cookie HTTP header in the hash string.
-The
-.Cm vcl_hash
-subroutine may terminate with one of the following keywords:
-.Bl -tag -width indent
-.It Cm hash
-Proceed.
-.El
-.\" vcl_hit
-.It Cm vcl_hit
-Called after a cache lookup if the requested document was found in the
-cache.
-.Pp
-The
-.Cm vcl_hit
-subroutine may terminate with one of the following keywords:
-.Bl -tag -width indent
-.It Cm error Ar code Op Ar reason
-Return the specified error code to the client and abandon the
-request.
-.It Cm pass
-Switch to pass mode.
-Control will eventually pass to
-.Cm vcl_pass .
-.It Cm deliver
-Deliver the cached object to the client.
-Control will eventually pass to
-.Cm vcl_deliver .
-.El
-.\" vcl_miss
-.It Cm vcl_miss
-Called after a cache lookup if the requested document was not found in
-the cache.
-Its purpose is to decide whether or not to attempt to retrieve the
-document from the backend, and which backend to use.
-.Pp
-The
-.Cm vcl_miss
-subroutine may terminate with one of the following keywords:
-.Bl -tag -width indent
-.It Cm error Ar code Op Ar reason
-Return the specified error code to the client and abandon the
-request.
-.It Cm pass
-Switch to pass mode.
-Control will eventually pass to
-.Cm vcl_pass .
-.It Cm fetch
-Retrieve the requested object from the backend.
-Control will eventually pass to
-.Cm vcl_fetch .
-.El
-.\" vcl_fetch
-.It Cm vcl_fetch
-Called after a document has been successfully retrieved from the
-backend.
-.Pp
-The
-.Cm vcl_fetch
-subroutine may terminate with one of the following keywords:
-.Bl -tag -width indent
-.It Cm error Ar code Op Ar reason
-Return the specified error code to the client and abandon the
-request.
-.It Cm pass
-Switch to pass mode.
-Control will eventually pass to
-.Cm vcl_pass .
-.It Cm deliver
-Possibly insert the object into the cache, then deliver it to the client.
-Control will eventually pass to
-.Cm vcl_deliver .
-.It Cm esi
-ESI-process the document which has just been fetched.
-.El
-.\" vcl_deliver
-.It Cm vcl_deliver
-Called before a cached object is delivered to the client.
-.Pp
-The
-.Cm vcl_deliver
-subroutine may terminate with one of the following keywords:
-.Bl -tag -width indent
-.It Cm error Ar code Op Ar reason
-Return the specified error code to the client and abandon the
-request.
-.It Cm deliver
-Deliver the object to the client.
-.El
-.El
-.Pp
-If one of these subroutines is left undefined or terminates without
-reaching a handling decision, control will be handed over to the
-builtin default.
-See the
-.Sx EXAMPLES
-section for a listing of the default code.
-.Ss Multiple subroutines
-If multiple subroutines with the same name are defined, they are
-concatenated in the order in which the appear in the source.
-.Pp
-Example:
-.Bd -literal -offset 4n
-# in file "main.vcl"
-include "backends.vcl";
-include "purge.vcl";
-
-# in file "backends.vcl"
-sub vcl_recv {
- if (req.http.host ~ "example.com") {
- set req.backend = foo;
- } elsif (req.http.host ~ "example.org") {
- set req.backend = bar;
- }
-}
-
-# in file "purge.vcl"
-sub vcl_recv {
- if (client.ip ~ admin_network) {
- if (req.http.Cache-Control ~ "no-cache") {
- purge_url(req.url);
- }
- }
-}
-.Ed
-.Pp
-The builtin default subroutines are implicitly appended in this way.
-.Ss Variables
-Although subroutines take no arguments, the necessary information is
-made available to the handler subroutines through global variables.
-.Pp
-The following variables are always available:
-.Bl -tag -width 4n
-.It Va now
-The current time, in seconds since the epoch.
-.El
-.Pp
-The following variables are available in backend declarations:
-.Bl -tag -width 4n
-.It Va .host
-Host name or IP address of a backend.
-.It Va .port
-Service name or port number of a backend.
-.El
-.Pp
-The following variables are available while processing a request:
-.Bl -tag -width 4n
-.It Va client.ip
-The client's IP address.
-.It Va server.hostname
-The host name of the server.
-.It Va server.identity
-The identity of the server, as set by the
-.Fl i
-parameter.
-If the
-.Fl i
-parameter is not passed to
-.Nm varnishd ,
-.Va server.identity
-will be set to the name of the instance, as specified by the
-.Fl n
-parameter.
-.It Va server.ip
-The IP address of the socket on which the client connection was
-received.
-.It Va server.port
-The port number of the socket on which the client connection was
-received.
-.It Va req.request
-The request type (e.g. "GET", "HEAD").
-.It Va req.url
-The requested URL.
-.It Va req.proto
-The HTTP protocol version used by the client.
-.It Va req.backend
-The backend to use to service the request.
-.It Va req.backend.healthy
-Whether the backend is healthy or not.
-.It Va req.http. Ns Ar header
-The corresponding HTTP
-.Ar header .
-.El
-.Pp
-The following variables are available while preparing a backend
-request (either for a cache miss or for pass or pipe mode):
-.Bl -tag -width 4n
-.It Va bereq.request
-The request type (e.g. "GET", "HEAD").
-.It Va bereq.url
-The requested URL.
-.It Va bereq.proto
-The HTTP protocol version used to talk to the server.
-.It Va bereq.http. Ns Ar header
-The corresponding HTTP
-.Ar header .
-.It Va bereq.connect_timeout
-The time in seconds to wait for a backend connection.
-.It Va bereq.first_byte_timeout
-The time in seconds to wait for the first byte from the backend.
-Not available in pipe mode.
-.It Va bereq.between_bytes_timeout
-The time in seconds to wait between each received byte from the backend.
-Not available in pipe mode.
-.El
-.Pp
-The following variables are available after the requested object has
-been retrieved from cache or from the backend:
-.Bl -tag -width 4n
-.It Va obj.proto
-The HTTP protocol version used when the object was retrieved.
-.It Va obj.status
-The HTTP status code returned by the server.
-.It Va obj.response
-The HTTP status message returned by the server.
-.It Va obj.cacheable
-True if the request resulted in a cacheable response.
-.\" see cache_center.c and rfc2616.c for details
-A response is considered cacheable if it is valid (see above), and the
-HTTP status code is 200, 203, 300, 301, 302, 404 or 410.
-.It Va obj.ttl
-The object's remaining time to live, in seconds.
-.It Va obj.lastuse
-The approximate time elapsed since the object was last requests, in
-seconds.
-.It Va obj.hits
-The approximate number of times the object has been delivered. A value of 0
-indicates a cache miss.
-.El
-.Pp
-The following variables are available while determining the hash key
-of an object:
-.Bl -tag -width 4n
-.It Va req.hash
-The hash key used to refer to an object in the cache. Used when both
-reading from and writing to the cache.
-.El
-.Pp
-The following variables are available while preparing a response to
-the client:
-.Bl -tag -width 4n
-.It Va resp.proto
-The HTTP protocol version to use for the response.
-.It Va resp.status
-The HTTP status code that will be returned.
-.It Va resp.response
-The HTTP status message that will be returned.
-.It Va resp.http. Ns Ar header
-The corresponding HTTP
-.Ar header .
-.El
-.Pp
-Values may be assigned to variables using the
-.Cm set
-keyword:
-.Bd -literal -offset 4n
-sub vcl_recv {
- # Normalize the Host: header
- if (req.http.host ~ "^(www\.)?example\.com$") {
- set req.http.host = "www.example.com";
- }
-}
-.Ed
-.Pp
-HTTP headers can be removed entirely using the
-.Cm remove
-keyword:
-.Bd -literal -offset 4n
-sub vcl_fetch {
- # Don't cache cookies
- remove obj.http.Set-Cookie;
-}
-.Ed
-.Sh EXAMPLES
-The following code is the equivalent of the default configuration with
-the backend address set to "backend.example.com" and no backend port
-specified.
-.\" Keep this in synch with bin/varnishd/mgt_vcc.c and etc/default.vcl
-.Bd -literal -offset 4n
-backend default {
- .host = "backend.example.com";
- .port = "http";
-}
-
-.so default.vcl
-.Ed
-.Pp
-The following example shows how to support multiple sites running on
-separate backends in the same Varnish instance, by selecting backends
-based on the request URL.
-.Bd -literal -offset 4n
-backend www {
- .host = "www.example.com";
- .port = "80";
-}
-
-backend images {
- .host = "images.example.com";
- .port = "80";
-}
-
-sub vcl_recv {
- if (req.http.host ~ "^(www\.)?example\.com$") {
- set req.http.host = "www.example.com";
- set req.backend = www;
- } elsif (req.http.host ~ "^images\.example\.com$") {
- set req.backend = images;
- } else {
- error 404 "Unknown virtual host";
- }
-}
-.Ed
-.Pp
-The following snippet demonstrates how to force a minimum TTL for all
-documents.
-Note that this is not the same as setting the
-.Va default_ttl
-run-time parameter, as that only affects document for which the
-backend did not specify a TTL.
-.Bd -literal -offset 4n
-sub vcl_fetch {
- if (obj.ttl < 120s) {
- set obj.ttl = 120s;
- }
-}
-.Ed
-.Pp
-The following snippet demonstrates how to force Varnish to cache
-documents even when cookies are present.
-.Bd -literal -offset 4n
-sub vcl_recv {
- if (req.request == "GET" && req.http.cookie) {
- lookup;
- }
-}
-
-sub vcl_fetch {
- if (obj.http.Set-Cookie) {
- deliver;
- }
-}
-.Ed
-.Pp
-The following code implements the HTTP PURGE method as used by Squid
-for object invalidation:
-.Bd -literal -offset 4n
-acl purge {
- "localhost";
- "192.0.2.1"/24;
-}
-
-sub vcl_recv {
- if (req.request == "PURGE") {
- if (!client.ip ~ purge) {
- error 405 "Not allowed.";
- }
- lookup;
- }
-}
-
-sub vcl_hit {
- if (req.request == "PURGE") {
- set obj.ttl = 0s;
- error 200 "Purged.";
- }
-}
-
-sub vcl_miss {
- if (req.request == "PURGE") {
- error 404 "Not in cache.";
- }
-}
-.Ed
-.Sh SEE ALSO
-.Xr varnishd 1
-.Sh HISTORY
-The
-.Nm
-language was developed by
-.An Poul-Henning Kamp Aq phk at phk.freebsd.dk
-in cooperation with Verdens Gang AS and Linpro AS.
-This manual page was written by
-.An Dag-Erling Sm\(/orgrav Aq des at des.no .
More information about the varnish-commit
mailing list