HAProxy provides flexible and scalable software-based load balancing. And now with the WURFL InFuze for HAProxy module, you can quickly inject WURFL’s device intelligence into HAProxy’s load balancing logic.
HAProxy Load Balancing Based on Smartphone, Tablet, or Other Device Form Factor

WURFL provides a number of options for load balancing criteria within HAProxy. We can envision load balancing by operating system, browser type, or the price of the smartphone. In our following example, we load balance based on the device’s form factor.
We separate traffic into three streams: Smartphone, Tablets, and Other (e.g. Desktop, Smart TV, etc.). HAProxy can redirect those streams to specific servers.
# This is an example of how to configure HAProxy to be used with WURFL Device Detection module.
#
# HAProxy needs to be compiled with support for this.
#
# This configuration performs a redirection to different backends based on wurfl detection
# In this scenario we have three backends:
# - One which serves SMARTPHONES devices (SmartphoneServer - 192.168.140.20)
# - One for TABLET devices (TabletServer - 192.168.140.30)
# - One (GeneralPurposeServer - 192.168.140.10) for any other type of clients (desktop, smartTV, etc ... )
#
global
stats socket /run/haproxy.sock mode 0600 level admin
# The WURFL data file
wurfl-data-file /usr/share/wurfl/wurfl-eval.xml
# WURFL cache
wurfl-cache-size 100000
wurfl-information-list-separator ,
# To properly redirect the client request we need to ask WURFL for the following capabilities:
wurfl-information-list is_smartphone is_tablet
log 127.0.0.1 local0
defaults
mode http
timeout connect 30s
timeout client 30s
timeout server 30s
frontend TheFrontend
bind 192.168.200.1:80
default_backend GeneralPurposeBackend
# Here we fill two new headers with the capabilities value obtained by WURFL
http-request set-header X-Wurfl-IsSmartphone %[wurfl-get(is_smartphone)]
http-request set-header X-Wurfl-IsTablet %[wurfl-get(is_tablet)]
# Here we check the values obtained by WURFL and redirect the request to the proper backend
acl isSmartphone hdr(X-Wurfl-IsSmartphone) "true"
acl isTablet hdr(X-Wurfl-IsTablet) "true"
use_backend SmartphoneBackend if isSmartphone
use_backend TabletBackend if isTablet
backend GeneralPurposeBackend
server GeneralPurposeServer 192.168.140.10
backend SmartphoneBackend
server SmartphoneServer 192.168.140.20
backend TabletBackend
server TabletServer 192.168.140.30Code language: PHP (php)
