我正在使用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
但不幸的是,没有任何作用。
任何想法??
此致 迈克尔
答案 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