Haproxy使用ACL可以进行客户端访问控制与内容路由控制
一.客户端访问控制
1.使用方式
(1).定义ACL控制规则
#acl(关键字) 规则名称(自定义) src(标识源端host) IP(地址段)标识
acl allow_client src 192.168.10.184/32
acl deny_client src 0.0.0.0/0
(2).使定义的规则生效
#http-request(关键字) allow/deny if Acl规则名称
http-request allow if allow_client
http-request deny if deny_client
注:
(1).如果"访问权限"所定义的"客户端IP地址"有重叠部分,那么其访问权限以http-request所指定的优先顺序为主,即如果"allow"在前,则允许访问,反之,deny在前则拒绝访问。
(2).如果某个客户端同时不在"allow"与"deny"所定义的范围内,也会具有"allow"权限
2.测试:
(1).环境:
客户端:
192.168.10.184
192.168.10.35
服务端:
192.168.10.33
(2).allow与deny部分都有包含10.184地址并且deny优先设定在allow前。
(3).在10.184做HOST 绑定www.17173.com到10.33,并在浏览器访问,出现403错误(权限不足)
(4).在10.35(该地址不在规则定义中)以同样方式进行访问,可以正常获取数据
二.ACL内容路由模式:
1.几种常用ACL路由模式:
(1).hdr_beg(host) #精确匹配主机,表示以xx开头的域名
acl host_beg hdr_beg(host) -i "www.baidu.com" #匹配以www.baidu.com开头的域名
(2).hdr_reg(host) #正则匹配主机,表示以xx开头的域名
acl host_reg hdr_reg(host) -i ".*baidu.com" #匹配baidu.com域名
(3).path_beg #匹配路径,以xx路径开头
(4).path_end #匹配路径,以xx路径结尾
(5).url_sub #表示请求URL中包含xx字符串
(6).url_dir #表示请求url中包含xx路径
2.使用方式:
(1).定义acl路由策略,如
acl hostacl hdr_beg(host) -i www.baidu.com
(2).引用所定义的acl路由策略
use_backend backgroup if hostacl #将符合hostacl策略的请求调度到后端backgroup组的服务器
3.测试:
(1).环境
服务端:192.168.10.33 (HA)
192.168.10.35 (NGINX)
192.168.10.38 (NGINX)
客户端:192.168.10.184
(2).定义两个后端服务器组web1、web2,并且对默认所有的请求都走web1服务器组。
(3).直接访问域名,检测默认条件下是否从10.38设备获取数据
(4).指定内容路由规则,当访问acltest域名的时候走10.35设备。
(5).重新访问域名www.acltest.com,检测请求的服务器为10.35