haproxy详解(下)
通过HAProxy的ACL规则实现智能负载均衡
由于HAProxy可以工作在七层模型下, 因此,要实现HAProxy的强大功能,一定要使用强大灵活的ACL规则,通过ACL规则可以实现基于HAProxy的智能负载均衡系统。HAProxy通过ACL规则完成两种主要的功能,分别是:
1)通过设置的ACL规则检查客户端请求是否合法。如果符合ACL规则要求,那么就将放行,反正,如果不符合规则,则直接中断请求。
2)符合ACL规则要求的请求将被提交到后端的backend服务器集群,进而实现基于ACL规则的负载均衡。
HAProxy中的ACL规则经常使用在frontend段中,使用方法如下:
acl 自定义的acl名称 acl方法 -i [匹配的路径或文件]
其中:
acl:是一个关键字,表示定义ACL规则的开始。后面需要跟上自定义的ACL名称 。
acl方法:这个字段用来定义实现ACL的方法,HAProxy定义了很多ACL方法,经常使用的方法有hdr_reg(host)、hdr_dom(host)、hdr_beg(host)、url_sub、url_dir、path_beg、path_end等。
-i:表示忽略大小写,后面需要跟上匹配的路径或文件或正则表达式。
与ACL规则一起使用的HAProxy参数还有use_backend,use_backend后面需要跟上一个backend实例名,表示在满足ACL规则后去请求哪个backend实例,与use_backend对应的还有default_backend参数,它表示在没有满足ACL条件的时候默认使用哪个后端backend。
下面列举几个常见的ACL规则例子:
acl www_policy hdr_reg(host) -i ^(www.z.cn|z.cn)
acl bbs_policy hdr_dom(host) -i bbs.z.cn
acl url_policy url_sub -i buy_sid=
use_backend server_wwwifwww_policy
use_backend server_appifurl_policy
use_backend server_bbsifbbs_policy
default_backend server_cache
一个动静分离的例子
acl url_static path_beg -i/data/static/images/javascript/stylesheets#url开头为这些的静态内容
acl url_static path_end -i .jpg .gif .png .css .js .html .ico#url结尾带为这些的静态内容
use_backend staserifurl_static#如果静态内容符合url_static的条件,就调度到staser中的服务器
default_backend dyser#其他默认调度到dyser中的服务器