7

Using HAProxy, I want to create the following setup:

  • All requests except root (/), /articles and /blogs go to server1
  • All requests for root (/), /articles and /blogs go to server2

I can't figure out how to match root without relying on setting the default server, which then negates the all requests go to server1 rule.

How can I express the above using HAProxy?

A regex may be the solution to this, but I'm not great with regex so it has been difficult to come up with a solution based on it.

0

1 Answer 1

7

The answer to this was astoundingly simple of course. The ACL needed to regex match ^$|^/$|^/articles|^/blogs

Below is my conf:

global
  pidfile  /var/run/haproxy.pid
  quiet
  daemon

defaults
  mode  http
  option  httplog
  option  dontlognull
  option http-server-close
  retries 1
  maxconn 1024
  contimeout  15000
  clitimeout  60050
  srvtimeout    1200000

frontend www
  bind :80

  acl is_for_server2 path_reg ^$|^/$|^/articles|^/blogs

  use_backend server2 if is_for_server2

  default_backend server1

backend server1
  option forwardfor
  server server1 10.0.8.1 maxconn 1500

backend server2
  option forwardfor
  server server2 10.0.8.2 maxconn 1500
2
  • a request for /blogstuff would go to server2, whereas OP may have intended such a request would go to server1. To fix, the path_reg could be expanded to: ^$|^/$|^/articles/|^/articles$|^/blogs/|^/blogs$
    – user252453
    Nov 5, 2014 at 12:47
  • acl is_for_server2 path_reg ^$|^/$|^/web doesn't work for me. If /web then this regex is true, else it is false even when the url is www.domain.com or www.domain.com/
    – Allen King
    Dec 18, 2017 at 7:28

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .