Configuration basics
Backends
A backend section defines a pool of servers to which the load balancer will route requests.
The following video is an overview of backends in an HAProxy configuration file and showcases several load balancing algorithms.
You can add as many backend sections as needed. Each backend keyword is followed by a label, such as web_servers, to differentiate it from others.
haproxybackend web_serversmode httpbalance roundrobinserver s1 192.168.1.25:80 checkserver s2 192.168.1.26:80 checkserver s3 192.168.1.27:80 check
haproxybackend web_serversmode httpbalance roundrobinserver s1 192.168.1.25:80 checkserver s2 192.168.1.26:80 checkserver s3 192.168.1.27:80 check
The label is mostly for readability, but it does come into play when referencing stick tables and categorizing traffic metrics. It should consist of only upper or lowercase letters, digits, dashes, underscores, dots, and colons.
Backend configuration example Jump to heading
The following example shows a pool of servers that are defined within the backend named web_servers. The server keyword identifies each server’s IP address and port, which the load balancer will use to send traffic to that server. The basic syntax of a server line includes a unique name, an IP address, and a port.
haproxyfrontend myfrontendmode httpbind :80default_backend web_serversbackend web_serversmode httpbalance roundrobinserver myfirstserver 192.168.1.25:80 checkserver mysecondserver 192.168.1.26:80 checkserver mythirdserver 192.168.1.27:80 check
haproxyfrontend myfrontendmode httpbind :80default_backend web_serversbackend web_serversmode httpbalance roundrobinserver myfirstserver 192.168.1.25:80 checkserver mysecondserver 192.168.1.26:80 checkserver mythirdserver 192.168.1.27:80 check
Define multiple backends Jump to heading
You can add multiple backend sections to service traffic for multiple websites or applications. In the configuration sample below, frontend foo_and_bar listens for all incoming HTTP requests and uses the use_backend directive to route traffic to either foo_servers or bar_servers, depending on the host HTTP header.
haproxyfrontend foo_and_barmode httpbind :80use_backend foo_servers if { req.hdr(host) -i foo.com }use_backend bar_servers if { req.hdr(host) -i bar.com }backend foo_serversmode httpbalance roundrobinserver foo1 192.168.1.25:80 checkserver foo2 192.168.1.26:80 checkserver foo3 192.168.1.27:80 checkbackend bar_serversmode httpbalance roundrobinserver bar1 192.168.1.35:80 checkserver bar2 192.168.1.36:80 checkserver bar3 192.168.1.37:80 check
haproxyfrontend foo_and_barmode httpbind :80use_backend foo_servers if { req.hdr(host) -i foo.com }use_backend bar_servers if { req.hdr(host) -i bar.com }backend foo_serversmode httpbalance roundrobinserver foo1 192.168.1.25:80 checkserver foo2 192.168.1.26:80 checkserver foo3 192.168.1.27:80 checkbackend bar_serversmode httpbalance roundrobinserver bar1 192.168.1.35:80 checkserver bar2 192.168.1.36:80 checkserver bar3 192.168.1.37:80 check
Change the load balancing algorithm Jump to heading
By default, servers in the backend share the work of handling requests by using round-robin load-balancing. In the next example, we have set the balance directive to leastconn, which will send traffic to the server with the fewest number of connections.
haproxybackend web_serversmode httpbalance leastconnserver s1 192.168.1.25:80 checkserver s2 192.168.1.26:80 checkserver s3 192.168.1.27:80 check
haproxybackend web_serversmode httpbalance leastconnserver s1 192.168.1.25:80 checkserver s2 192.168.1.26:80 checkserver s3 192.168.1.27:80 check
Other load balancing algorithms include hash, source, first, random, and more. See all the available load-balancing algorithms in HAProxy Configuration Manual’s balance.
Enable health checks Jump to heading
Adding the check argument to each server line is a good practice; this enables health checking to remove unhealthy servers that don’t respond to a TCP connection from the load balancing rotation.
haproxybackend web_serversmode httpbalance roundrobinserver s1 192.168.1.25:80 checkserver s2 192.168.1.26:80 checkserver s3 192.168.1.27:80 check
haproxybackend web_serversmode httpbalance roundrobinserver s1 192.168.1.25:80 checkserver s2 192.168.1.26:80 checkserver s3 192.168.1.27:80 check
See also Jump to heading
For complete information on these directives that can be used in backends, see the HAProxy Configuration Manual:
- To specify the type of traffic being processed, see mode.
- For complete information on
serverdirective syntax and options, see server. - To direct traffic to a specific backend, see use_backend.
Do you have any suggestions on how we can improve the content of this page?