HAproxy ACL书写规则
通过ACL控制列表,实现基于 HAproxy的只能负载均衡系统。
ACL主要完成功能:2种
1、通过设置的AC规则检查客户端请求是否合法,如果符合ACL规则要求,则进行放行
2、符合的ACL规则要求的请求将被提交到后端的backend服务器集群,进行实现基于ACL的动静分离负载均衡。
ACL规则配置位置
在 frontend 前端虚拟服务器中写入
ACL规则写入方法
acl 自定义的acl名称 acl方法 -i [匹配的路径或文件]
-i 不区分大小写
匹配方法 | 注解 | 例子 |
hdr_reg(host) | 多条完全合格域名检测 | hdr_reg(host) -i www.shm.com I baidu.shm.com |
hdr_dom(host) | 单条完全合格域名检测 | hdr_dom(host) -i www.shm.com |
hdr_beg(host) | 以某个域名开头 | hdr_beg(host) img. ftp. video. www. |
path_beg | url以什么开头进行检测 | path_beg www. 一般很少用 |
path_end | url以什么结尾进行检测 | path_end .gif .png .jpg .css .js .jsp .php |
url_sub | url包含某段字符串进行检测 | url_sub buy_sid= 一般很少用 |
url_dir | url包含部分地址路径进行检测 | url_dir timetask |
详细ACL规则写入:
一、根据域名匹配
1.hdr_reg(host)
acl www_prolicy hdr_reg(host) -i www.shm.com|web.shm.com
如果客户端以 www.shm.com /web.shm.com的域名发送请求,-i忽略大小。此处一般为FQDN
2.hdr_dom(host)
acl www_prolicy hdr_dom(host) -i lvs.shm.com
如果客户端请求的域名满足 lvs.shm.com -i 忽略大小
3.hdr_beg(host)
acl www_prolicy hdr_beg(host) -i img. video. download. ftp.
如果客户端以 img. video. ftp.为开头的域名发送请求 -i 忽略大小
4.url_sub
acl www_prolicy url_sub -i buy_sid=
如果客户端请求的url中包含 buy_sid ,则控制列表返回 true ,否则为 flase
5.url_dir
acl www_prolicy url_dir -i timetask
如果客户端请求的url 中包含 timetask ,则控制策略返回 true,否则为 flase
二、根据请求的页面格式进行匹配
1.path_end
acl url_static path_end .gif .png .jpg .css .js
如果客户端请求的URL中以 .gif .png 。。。结尾返回true
2.php / jsp 页面动静分离
acl url_php path_end .php
acl url_jsp path_end .jsp
如果客户端请求的URL中以 .php / .jsp 结尾 返回true
三、控制列表指向后端真实服务器群组
1、use_backend + backend实例名 表示满足ACL规则后去请求哪个backend实例
2、default_backend + backend实例名 表示没有满足ACL规则后 去默认请求哪个 backend实例
3、block if + acl策略名 表示阻止该ACL列表的请求
use_backend 真实服务器群组名 if ACL规则列表名
use_backend server_bbs if bbs_policy
当用户发送的请求满足 bbs_policy 的ACL规则时,HAproxy就会把请求发往 server_bbs这个真实服务器群组进行匹配
default_backend 真实服务群组名
default_backend server_cache
当用户发送的请求不满足任何一个acl规则时,HAproxy就会把请求发往由default_backend选项指定的server_cache这个后端群组
案例:
frontend www
bind *:80
mode http
option httplog
option forwardfor
option httpclose
log global
#ACL
acl url_static path_end .gif .png .jpg .css .js
acl url_php path_end .php
acl url_jsp path_end .jsp
acl baidu_prolicy hdr_reg(host) -i ^(baidu.com)
acl google_prolicy hdr_reg(host) -i ^(google.com)
#use_backend
use_backend server_php if url_php
use_backend server_jsp if url_jsp
use_backend server_static if url_static
use_backend server_baidu if baidu_prolicy
user_backend server_google if goole_prolicy
#default_backend
default_backend server_cache
#后端服务器真实群组:php群组
backend server_php
mode http
option redispatch
option abortonclose
balance source
cookie SERVERID
option httpchk GET /index.php
#option httpche GET /index.jsp 如果是 .jsp格式文件此处参数修改为 Index.jsp
server default 192.168.10.5:80 cookie php1 weight 3 check inter 2000 rise 2 fall 3
server default 192.168.10.6:80 cookie php2 weight 3 check inter 2000 rese 2 fall3
server default 192.168.10.7:80 cookie php3 weight 3 check inter 2000 rese 2 fall3
...太多了省略了,如果细心看相信自己写个配置文件是没问题的