Maxsteel
Maxsteel

Reputation: 2040

Configuring HAProxy to route traffic based on url_param

I am very new to HAProxy. I spent a few hours trying to figure out how to do it but could not get any leads. My requirement is this:

If end point of request is /special then I need to check URL_PARAM.

For example: localhost/special?id=10

Based on ID, I need to route it to one of the 3 servers. If id <=3 server1, if id > 3 and id <=6 server2 else server3.

If end point is not /special round robin between all 3 servers.

How do I achieve this 2 level balancing?

Upvotes: 4

Views: 7337

Answers (1)

David Duponchel
David Duponchel

Reputation: 4069

You can use urlp and urlp_val to extract the id. Then, use acl to match the integer:

acl is_special     path_beg /special
acl small_id         urlp_val(id) le 3
acl medium_id        urlp_val(id) 4:6
acl high_id          urlp_val(id) gt 6

use_backend bck1     if is_special small_id
use_backend bck2     if is_special medium_id
use_backend bck3     if is_special high_id
default_backend      bck_all

Then, create 3 backends: one for each case.

Edit:

If you want to use regex on the query param, use urlp_reg:

acl small_id       urlp_reg(id) ^[0-3]
acl medium_id      urlp_reg(id) ^[4-6]
acl high_id        urlp_reg(id) ^[7-9]

Also check stick, depending on what you're trying to do.

Upvotes: 4

Related Questions