我使用haproxy 1.4.13版本的Ubuntu。
其负载均衡两个子域名:
现在我想能够使用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响应。 您可以使用errorloc或errorfile来自定义响应。
但是这可能是我稍微误解了你的问题。 目前还不清楚究竟是不是按预期工作。