Haproxy ACL规则实现智能负载均衡

网友投稿 1598 2022-10-18

Haproxy ACL规则实现智能负载均衡

Haproxy ACL规则实现智能负载均衡

HAProxy的ACL 是什么?

由于HAProy可以工作在七层模型下,因此,要实现 HAProxy的强大功能,一定要使用强大灵活的ACL规则,通过ACL规则可以实现基于HAProy的智能负载均衡功能。HARroxy 通过ACL 规则完成两种主要的功能,分别是∶

1)通过设置的ACL规则检查客户端请求是否合法。如果符合ACL规则要求,那么就将放行,反正,如果不符合规则,则直接中断请求。

2)符合ACL 规则要求的请求将被提交到后端的backend 服务器集群,进而实现基于ACL 规则的负载均衡

ACL规则语法

HAProxy中的ACL规则经常使用在frontend 段中,使用方法如下∶

acl语法#acl 参数acl(关键字) 定义acl(名称) 方法(criterion) -i (flags) [匹配的路径或文件] hdr_beg(host) hdr_reg(host) path_beg path_end

acl∶是一个关键字,表示定义ACL规则的开始。后面需要跟上自定义的ACL名称

acl方法这个字段用来定义实现ACL的方法,HAproxy定义了很多ACL方法,经常使用的方法也就那么些,比如有 hdr_reg(host)、hr_dom(host)、hdr_beg(host)、url_sub、url_dir、path_beg、path_end等.

ACL常用方法

常用的方法:(-i∶表示忽略大小写,后面需要跟上匹配的路径或文件或正则表达式。)

hdr_beg(host):精确匹配主机,表示以什么开头的域名hdr_reg(host):正则匹配例子:acl bbs hdr_reg(host) -i ^(bbs.test.com|shequ.test.com|forum)例子:acl hdr_reg(host) -i ^(z-|z-)

path_beg: 用于测试请求的URL是否以指定的模式开头(匹配路径,表示以什么路径开头)例子:acl url_static path_beg -i /static /iilannis /javascript /stylesheets用于测试URL是否以/static、/iilannis、/javascript或/stylesheets开头。path_end:用于测试请求的URL是否以指定的模式结尾(匹配路径结尾,表示以什么路径结尾)例子:acl url_static path_end -i .jpg .gif .png .css .js测试URL是否以.jpg、.gif、.png、.css或.js结尾。(这些都是静态资源,以静态资源结尾)

url_sub:表示请求url中包含什么字符串url_dir:表示请求url中存在哪些字符串作为部分地址路径url_sub 表示请求url中包含什么字符串例如: acl file_req url_sub -i killall= 表示在请求url当中包含killall=,则此控制策略返回trueurl_dir∶表示请求url中存在哪些字符串作为部分地址路径例如: acl dir_eq url_dir -i allow,表示在请求url中存在allow作为部分地址路径。则此控制策略返回 true,否则返回false

以上这三种ACL规则可以满足企业当中绝大部分场景。

与ACL 规则一起使用的HAProy参数还有use_backend,use_badend后面需要跟上一个 backend实例名,表示在满足 ACL规则后去请求哪个backend实例,与use_badend对应的还有default_backend参数,它表示在没有满足ACL条件的时候默认使用哪个后端 backend。

下面列举几个常见的ACL规则例子∶

#reg说明是可以使用正则,如果我们的域名是以z-或者以z-开头的就满足这样一个策略acl hdr_reg(host) -i ^(z-|z-)#精确匹配,只有域名为bbs.z-才满足这个ACL规则acl bbs_policy hdr_dom(host) -i bbs.z-#如果请求的URL当中有buy_sid=字符串的时候就满足该ACL规则acl url_policy url_sub -i buy_sid=#当满足ACL规则时候会使用use_backend来接上上面定义的ACL规则#当ACL规则满足 server_ if server_app if url_pollcyuse_backend endserver_bbs if bbs_policydefault backend server_cache#上面的ACL规则从上到下依次执行

acl html url_reg -i \.html$ #访问控制列表名称html。规则要求访问以html结尾的url(可选)use_backend if html#如果满足acl html规则,则推送给后端服务器default_backend #默认使用的服务器组backend #名字要与上面的名字必须一样 balance roundrobin #负载均衡的方式 server 192.168.13.133:80 maxconn 2000 weight 1 check inter 1s rise 2 fall 2 server 192.168.13.137:80 maxconn 2000 weight 1 check inter 1s rise 2 fall 2

ACL规则举例说明

在你本地host里面配置本地域名解析规则,该IP地址为你的Haproxy物理地址,即192.168.179.101(这里没有配置keepalived,所以并没有VIP地址,这里是物理网卡地址)

ACL规则放在fronted的字段 ,所有配置如下

[root@master ~]# cat /etc/haproxy/haproxy.cfgglobal log 127.0.0.1 local2 info pidfile /var/run/haproxy.pid maxconn 4096 user haproxy group haproxy daemon nbproc 1 defaults mode log global retries 3 option redispatch maxconn 4000 timeout connect 5000 timeout client 5000 timeout server 5000 timeout check 5000frontend web mode bind *:80 option option forwardfor option log global acl a-server base_dom -i test.com use_backend if a-server default_backend backend option redispatch option abortonclose cookie SERVERID insert indirect nocache server 192.168.179.102:80 maxconn 2000 cookie server1 weight 1 check inter 1s rise 2 fall 2 server 192.168.179.103:80 maxconn 2000 cookie server2 weight 1 check inter 1s rise 2 fall 2backend option redispatch option abortonclose cookie SERVERID insert indirect nocache server 192.168.179.102:8080 maxconn 2000 cookie server3 weight 1 check inter 1s rise 2 fall 2listen stats bind *:81 stats enable stats uri /haproxy stats auth lulei:123 log 127.0.0.1 local2 err stats admin if TRUE stats hide-version stats refresh 30s

当访问的域名不一样,访问的后端服务器群组是不一样的,根据ACL规则如果访问域名为test.com则跳转到后端的 backend 上面,对应Nginx服务器。其余的域名使用 backend 缺省 default_backend    ,所以这里只是演示一下

直接访问IP也不满足ACL规则

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:wx-rss.js 一个轻量级的事件订阅器,主要解决微信小程序跨页面传参问题
下一篇:微信小程序客服消息模块,基于驱动开发,支持所有的客服消息的发送
相关文章

 发表评论

暂时没有评论,来抢沙发吧~