为了平衡URL请求,使用Haproxy ACL

我使用haproxy 1.4.13版本的Ubuntu。

其负载均衡两个子域名:

  • app1.domain.com
  • app2.domain.com

现在我想能够使用ACL根据url请求发送到右后端例如:

http://app1.domain.com/path/games/index.php sould be send to backend1 http://app1.domain.com/path/photos/index.php should be send to backend2 http://app2.domain.com/path/mail/index.php sould be send to backend3 http://app2.domain.com/path/wazap/index.php should be send to backend4 

我确实使用了下面的acl代码

 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 

….

由于path邮件,照片等将在iis上的应用程序池,我想监视他们,如果他们活着,如果池不响应它应该停止服务它。

我的问题是肯定在正则expression式在acl中msg-url-4 url​​_reg ^ / path / wazap /.*

我应该在ACL中更改哪些内容才能使其正常工作?

感谢任何提示

我不知道这是不是一个真正的问题,但你不需要在HAProxy的正则expression式中跳过斜杠。 另外,在你陈述的情况下,你甚至不需要正则expression式,但可以使用简单的string匹配器。 它们比正则expression式快得多。 所以你的ACL可能是这样的:

 acl msg-url-3 url_beg /path/mail/ acl msg-url-4 url_beg /path/wazap/ 

如果在分派的后端没有服务器可用,HAProxy将返回一个HTTP 503响应。 您可以使用errorlocerrorfile来自定义响应。

但是这可能是我稍微误解了你的问题。 目前还不清楚究竟是不是按预期工作。