Configuring the Varnish API
Before you start matching user agents, you may wish to configure the solution to use a different data set for example, or to use caching.
Init Settings - These settings are used in the vcl_init method and should only be set once.
| Setting | Default | Description |
|---|---|---|
| fiftyonedegrees.start | N/A | Starts the 51Degrees module using the data set path provided. All other 51Degrees init options must be set before calling this. |
| fiftyonedegrees.set_cache | 1000 | Sets the size of the workset cache. |
| fiftyonedegrees.set_pool | 20 | Sets the size of the workset pool. |
| fiftyonedegrees.set_delimiter | "," | Sets the delimiter to separate values with. |
| fiftyonedegrees.set_properties | All properties. | Set the properties to initialise |
Match Settings - These settings are valid in the vcl_recv and vcl_deliver methods, and any number can be set.
| Setting | Description |
|---|---|
| fiftyonedegrees.match_single | Gets device properties using a User-Agent. Takes a User-Agent string and a comma separated list of properties to return. |
| fiftyonedegrees.match_all | Gets device properties using multiple HTTP headers. Takes comma separated list of properties to return. |
For full documentation, use
$ man vmod_fiftyonedegrees
Example Config
Below is an example config file showing how to load a Pattern data file, and set some device properties using the "match_single" and "match_all" directives. Some commonly used properties are set as request headers, some as a list and some as single headers. They are also set as response headers in the "vcl_deliver" method to make it possible to see how the matching works without having a full website set up.
# This is a basic VCL configuration file for varnish. See the vcl(7)
# man page for details on VCL syntax and semantics.
#
# Default backend definition. Set this to point to your content
# server.
#
vcl 4.0;
import fiftyonedegrees;
backend default {
.host = "127.0.0.1";
.port = "80";
}
sub vcl_recv {
set req.http.X-IsMobile = fiftyonedegrees.match_all("IsMobile");
set req.http.X-BrowserName = fiftyonedegrees.match_all("BrowserName");
set req.http.X-PlatformName = fiftyonedegrees.match_all("PlatformName");
set req.http.X-Difference = fiftyonedegrees.match_all("Difference");
set req.http.X-Method = fiftyonedegrees.match_all("Method");
set req.http.X-Rank = fiftyonedegrees.match_all("Rank");
set req.http.X-DeviceId = fiftyonedegrees.match_all("DeviceId");
}
sub vcl_deliver {
set resp.http.X-IsMobile = fiftyonedegrees.match_all("IsMobile");
set resp.http.X-BrowserName = fiftyonedegrees.match_single(req.http.user-agent, "BrowserName");
set resp.http.X-PlatformName = fiftyonedegrees.match_single(req.http.user-agent, "PlatformName");
set resp.http.X-Difference = fiftyonedegrees.match_all("Difference");
set resp.http.X-Method = fiftyonedegrees.match_all("Method");
set resp.http.X-Rank = fiftyonedegrees.match_all("Rank");
set resp.http.X-ID = fiftyonedegrees.match_all("DeviceId");
}
sub vcl_init {
fiftyonedegrees.start("/path/to/51Degrees.dat");
}