mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-18 09:24:31 +00:00
3f2803e5cb
In order to simplify maintenance and long-term evolutions, now the feature remains enabled by setting USE_51DEGREES=1 and the version is set in 51DEGREES_VER (3 or 4 are supported only). The default version remains 3. All 51DEGREES flags are shared between both versions and only use the "51DEGREES_" prefix. The related CFLAGS and LDFLAGS can now be overridden using 51DEGREES_CFLAGS and 51DEGREES_LDFLAGS, both of which are automatically collected into the respective OPTIONS_*. The USE_51DEGREES_V4 option is now removed, and the doc was updated.
175 lines
7.8 KiB
Plaintext
175 lines
7.8 KiB
Plaintext
51Degrees Device Detection
|
|
--------------------------
|
|
|
|
You can also include 51Degrees for inbuilt device detection enabling attributes
|
|
such as screen size (physical & pixels), supported input methods, release date,
|
|
hardware vendor and model, browser information, and device price among many
|
|
others. Such information can be used to improve the user experience of a web
|
|
site by tailoring the page content, layout and business processes to the
|
|
precise characteristics of the device. Such customisations improve profit by
|
|
making it easier for customers to get to the information or services they
|
|
need. Attributes of the device making a web request can be added to HTTP
|
|
headers as configurable parameters.
|
|
|
|
In order to enable 51Degrees download the 51Degrees source code from the
|
|
official git repository :
|
|
|
|
- either use the proven stable but frozen 3.2.10 version which
|
|
supports the Trie algorithm :
|
|
|
|
git clone https://git.51Degrees.com/Device-Detection.git -b v3.2.10
|
|
|
|
- use newer 3.2.12.12 version which continues to receive database
|
|
updates and supports a new Hash Trie algorithm, but which is not
|
|
compatible with older Trie databases :
|
|
|
|
git clone https://github.com/51Degrees/Device-Detection.git -b v3.2.12
|
|
|
|
- or use the latest 51Degrees version 4 with 51Degrees Hash algorithm,
|
|
not compatible with older databases :
|
|
|
|
git clone --recurse-submodules https://github.com/51Degrees/device-detection-cxx.git
|
|
|
|
then run 'make' with USE_51DEGREES, optionally 51DEGREES_VER=4 (if using
|
|
51Degrees version 4), and 51DEGREES_SRC set. Both 51DEGREES_INC and
|
|
51DEGREES_LIB may additionally be used to force specific different paths for
|
|
.o and .h, but will default to 51DEGREES_SRC. Make sure to replace
|
|
'51D_REPO_PATH' with the path to the 51Degrees repository.
|
|
|
|
51Degrees provide 4 different detection algorithms:
|
|
|
|
1. Pattern - balances main memory usage and CPU.
|
|
2. Trie - a very high performance detection solution which uses more main
|
|
memory than Pattern.
|
|
3. Hash Trie - replaces Trie, 3x faster, 80% lower memory consumption and
|
|
tuning options.
|
|
4. 51Degrees V4 Hash - only with 51Degrees Device Detection V4.
|
|
|
|
To make with 51Degrees Pattern algorithm use the following command line.
|
|
|
|
$ make TARGET=<target> USE_51DEGREES=1 51DEGREES_SRC='51D_REPO_PATH'/src/pattern
|
|
|
|
To use the 51Degrees Trie algorithm use the following command line.
|
|
|
|
$ make TARGET=<target> USE_51DEGREES=1 51DEGREES_SRC='51D_REPO_PATH'/src/trie
|
|
|
|
To build with the 51Degrees Device Detection V4 use the following command line.
|
|
|
|
$ make TARGET=<target> USE_51DEGREES=1 51DEGREES_VER=4 51DEGREES_SRC='51D_REPO_PATH'/src
|
|
|
|
A data file containing information about devices, browsers, operating systems
|
|
and their associated signatures is then needed. 51Degrees provide a free
|
|
database with Github repo for this purpose. These free data files are located
|
|
in '51D_REPO_PATH'/data with the extensions .dat for Pattern data and .trie for
|
|
Trie data. Free Hash Trie data file can be obtained by signing up for a licence
|
|
key at https://51degrees.com/products/store/on-premise-device-detection.
|
|
If using the 51degrees version 4, the free hash data file is located in
|
|
'51D_REPO_PATH'/device-detection-data with the .hash extension.
|
|
|
|
For HAProxy developers who need to verify that their changes didn't affect the
|
|
51Degrees implementation, a dummy library is provided in the
|
|
"addons/51degrees/dummy" directory. This does not function, but implements the
|
|
API such that the 51Degrees module can be used (but not return any meaningful
|
|
information). To test either Pattern or Hash Trie, or the 51Degrees version 4
|
|
Hash algorithm, build with:
|
|
|
|
$ make TARGET=<target> USE_51DEGREES=1 51DEGREES_SRC=addons/51degrees/dummy/pattern
|
|
or
|
|
$ make TARGET=<target> USE_51DEGREES=1 51DEGREES_SRC=addons/51degrees/dummy/trie
|
|
or
|
|
$ make TARGET=<target> USE_51DEGREES=1 51DEGREES_VER=4 51DEGREES_SRC=addons/51degrees/dummy/v4hash
|
|
|
|
respectively.
|
|
|
|
The configuration file needs to set the following parameters:
|
|
|
|
global
|
|
51degrees-data-file path to the Pattern, Trie or V4 Hash data file
|
|
51degrees-property-name-list list of 51Degrees properties to detect
|
|
51degrees-property-separator separator to use between values
|
|
51degrees-cache-size LRU-based cache size (disabled by default)
|
|
|
|
The following is an example of the settings for Pattern.
|
|
|
|
global
|
|
51degrees-data-file '51D_REPO_PATH'/data/51Degrees-LiteV3.2.dat
|
|
51degrees-property-name-list IsTablet DeviceType IsMobile
|
|
51degrees-property-separator ,
|
|
51degrees-cache-size 10000
|
|
|
|
HAProxy needs a way to pass device information to the backend servers. This is
|
|
done by using the 51d converter or fetch method, which intercepts the HTTP
|
|
headers and creates some new headers. This is controlled in the frontend
|
|
http-in section.
|
|
|
|
The following is an example which adds two new HTTP headers prefixed X-51D-
|
|
|
|
frontend http-in
|
|
bind *:8081
|
|
default_backend servers
|
|
http-request set-header X-51D-DeviceTypeMobileTablet %[51d.all(DeviceType,IsMobile,IsTablet)]
|
|
http-request set-header X-51D-Tablet %[51d.all(IsTablet)]
|
|
|
|
Here, two headers are created with 51Degrees data, X-51D-DeviceTypeMobileTablet
|
|
and X-51D-Tablet. Any number of headers can be created this way and can be
|
|
named anything. 51d.all( ) invokes the 51degrees fetch. It can be passed up to
|
|
five property names of values to return. Values will be returned in the same
|
|
order, separated by the 51-degrees-property-separator configured earlier. If a
|
|
property name can't be found the value 'NoData' is returned instead.
|
|
|
|
In addition to the device properties three additional properties related to the
|
|
validity of the result can be returned when used with the Pattern method. The
|
|
following example shows how Method, Difference and Rank could be included as one
|
|
new HTTP header X-51D-Stats.
|
|
|
|
frontend http-in
|
|
...
|
|
http-request set-header X-51D-Stats %[51d.all(Method,Difference,Rank)]
|
|
|
|
These values indicate how confident 51Degrees is in the result that that was
|
|
returned. More information is available on the 51Degrees web site at:
|
|
|
|
https://51degrees.com/support/documentation/pattern
|
|
|
|
The above 51d.all fetch method uses all available HTTP headers for detection. A
|
|
modest performance improvement can be obtained by only passing one HTTP header
|
|
to the detection method with the 51d.single converter. The following example
|
|
uses the User-Agent HTTP header only for detection.
|
|
|
|
frontend http-in
|
|
...
|
|
http-request set-header X-51D-DeviceTypeMobileTablet %[req.fhdr(User-Agent),51d.single(DeviceType,IsMobile,IsTablet)]
|
|
|
|
Any HTTP header could be used inplace of User-Agent by changing the parameter
|
|
provided to req.fhdr.
|
|
|
|
When compiled to use the Trie detection method the trie format data file needs
|
|
to be provided. Changing the extension of the data file from dat to trie will
|
|
use the correct data.
|
|
|
|
global
|
|
51degrees-data-file '51D_REPO_PATH'/data/51Degrees-LiteV3.2.trie
|
|
|
|
When used with Trie the Method, Difference and Rank properties are not
|
|
available.
|
|
|
|
When using the 51Degrees V4 Hash algorithm, the hash format data file needs
|
|
to be provided as in the following example.
|
|
|
|
global
|
|
51degrees-data-file '51D_REPO_PATH'/device-detection-data/51Degrees-LiteV4.1.hash
|
|
|
|
The free Lite data file contains information about screen size in pixels and
|
|
whether the device is a mobile. A full list of available properties is located
|
|
on the 51Degrees web site at:
|
|
|
|
https://51degrees.com/resources/property-dictionary
|
|
|
|
Some properties are only available in the paid for Premium and Enterprise
|
|
versions of 51Degrees. These data sets not only contain more properties but
|
|
are updated weekly and daily and contain signatures for 100,000s of different
|
|
device combinations. For more information see the data options comparison web
|
|
page:
|
|
|
|
https://51degrees.com/compare-data-options
|