How can I get HAProxy backends to include a path

When using HAProxy for virtual hosting, I can see how to use the Host from the header at the front end to decide what backend to route to. However, is it possible to make the back end be a URL which includes a path (not unlike what you would do with apache or nginx when setting up virtual hosting).

http://www.techrawr.com/tag/haproxy/ - shows most of it. But what if the back ends were on the one server but with backend1 and backend2 as the servers?


Solution 1:

I think you're looking for something like this in order to balance to different servers based on the URL:

frontend http-farm
    bind 0.0.0.0:80
    acl app1web     hdr_beg(host) -i app1  # for http://app1.domain.com
    acl app2web     hdr_beg(host) -i app2  # for http://app2.domain.com

acl msg-url-1 url_reg ^\/path/games/.*
acl msg-url-2 url_reg ^\/path/photos/.*
acl msg-url-3 url_reg ^\/path/mail/.*
acl msg-url-4 url_reg ^\/path/wazap/.*

use_backend games  if  msg-url-1 app1web
use_backend photos if  msg-url-2 app2web
use_backend mail if .....



backend games
    option httpchk GET /alive.php HTTP/1.1\r\nHost:\ app1.domain.com
    option  forwardfor
    balance roundrobin
    server  appsrv-1  192.168.1.10:80  check inter 2000 fall 3
    server  appsrv-2  192.168.1.11:80  check inter 2000 fall 3

backend photos
    option httpchk GET /alive.php HTTP/1.1\r\nHost:\ app2.domain.com
    option  forwardfor
    balance roundrobin
    server  appsrv-1  192.168.1.13:80  check inter 2000 fall 3
    server  appsrv-2  192.168.1.14:80  check inter 2000 fall 3

Source: Haproxy ACL for balance on URL request