How can I make haproxy route requests based on URL substrings?

A load balancer is set up with two back ends.

The request URI will look like the following:

http://example.com/answers/submit
http://example.com/tag-02/answers/submit

How can I configure haproxy in such a way that the request is sent to one or the other of the two back ends, depending on the format of the request URI? The only difference between the requests is /tag-02/ in the request URI.

A haproxy config file for this with a bit of explanation would be much appreciated, since I’m new to haproxy.


You want to use ACLs:

backend be1 # this is your default backend
  ...
backend be2 # this is for /tag-02 requests
  ...

frontend fe
  ...
  default_backend be1
  acl url_tag02 path_beg /tag-02
  use_backend be2 if url_tag02

Section 7 of the HAProxy configuration guide has the details on ACLs, but you have to know the magic use_backend incantation hidden in section 4 of the guide to know what to do with the ACLs.


To provide a better example to the answer above , below is a configuration example.

frontend https-in
   bind *:443 ssl crt /etc/ssl/server.pem
   mode http
   redirect scheme https if !{ ssl_fc }

   acl uri_help path_beg /help
   use_backend help if uri_help

backend help
    balance     roundrobin
    server      help yourbackendserver.com check