How to make haproxy route requests based on URL substrings

haproxy

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.

Best Answer

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.