基于haproxy路径深度的acl

时间:2015-04-02 09:42:49

标签: acl haproxy

我正在使用HAproxy进行负载均衡。

要求是:

  • old_servers_pool时使用服务器池http://www.myproject.com:8080/*/*.pdf 换句话说,当路径深度为1且后缀为.pdf

  • new_servers_pool

  • 下的任何其他内容时使用服务器池http://www.myproject.com:8080

我在haproxy.config中尝试过像:

global
    log 127.0.0.1 local0 debug
    maxconn 200
    user    root
    group   root


defaults
    log     global
    mode    http
    option  httplog
    retries 3
    option redispatch
    timeout connect 5000
    timeout http-request 5s


backend old-servers
   http-check expect status 200
   balance roundrobin
   server server_static_old_1 192.168.1.155:80

backend new-servers
   http-check expect status 200
   balance roundrobin
   server server_static_old_1 192.167.1.1:80

frontend public
   bind *:8080
acl old_lst  path_reg -i  /.*/.*\.pdf
use_backend old-servers if old_lst
default_backend new-servers

但它不起作用。

每次使用以下acl定义之一进行一些测试:

acl old_lst   path_reg -i /*/*\.pdf
use_backend old-servers if { path_reg -i /.*/.*(.pdf) }
acl old_lst  path_reg -i  /.*/.*\.pdf
acl old_lst  path_reg -i  /.*$/.*\.pdf
acl old_lst  path_reg -i  /.*/.*\.pdf$
acl old_lst  path_reg -i  /.*/  AND   path_end -i .pdf
acl old_lst path_reg -i  /([a-z0-9\-\.]*)/([a-z\-]*)\.pdf

但不幸的是,没有任何作用。

任何想法??

此致 迈克尔

1 个答案:

答案 0 :(得分:0)

我认为这可以通过ACL的组合来实现,一个用于路径的开头,一个用于结束。

acl old_lst path_beg -m reg ^(\/[\w\.-]+)\/

应该创建一个接受单个路径深度的ACL。 Check it out the regex here

正则表达式查看/,包含字母和数字的捕获组的行的开头。 - (这可能不包括所有情况),然后是另一个斜线。

acl pdf path_end .pdf应该为以.pdf结尾的所有内容创建一个ACL。

把它们放在一起

use_backend old-servers if old_lst pdf

我的回答是因为我在寻找类似ACL问题的答案时遇到了你的问题,但我没有尽力测试上述情况,所以祝你好运,我希望这有帮助!

http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#7