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 等。
经常使用的方法:
hdr_beg(host) #精确匹配主机, 表示以什么开头的域名
hdr_reg(host) #正则匹配主机,表示以什么开头的域名
path_beg #匹配路径,表示以什么路径开头
path_end #匹配路径结尾,表示以什么路径结尾
url_sub : 表示请求url 中包含什么字符串,例如:acl file_req url_sub -i killall=,表示在请求url 中包含killall=,则此控制策略返回true
url_dir : 表示请求url 中存在哪些字符串作为部分地址路径,例如 acl dir_req url_dir -i allow,表示在请求url 中存在allow作为部分地址路径,则此控制策略返回true,否则返回false
-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_www if www_policy use_backend server_app if url_policy use_backend server_bbs if bbs_policy
default_backend server_cache
(1).4层常用检查标准,官方手册:https://cbonte.github.io/haproxy-dconv/1.7/configuration.html#7.3.3
src <ip_addr> src_port <PORT or PORT_ranges> dst <ip_addr> dst_port <PORT or PORT_ranges> 其中src、src_port、dst和dst_port就是检查标准creiterion,其后的值就是value。
例如:
acl accept_clients src 192.168.100.0/24 acl reject_clients src 172.16.0.0/16 tcp-request content accept if accept_clients tcp-request content reject if reject_clients tcp-request content reject # 此项表明不匹配前两项的默认都拒绝
(2).7层常用检查标准,官方手册:https://cbonte.github.io/haproxy-dconv/1.9/configuration.html#7.3.6
hdr(HEADER):检查首部字段的值是否为指定的值,如hdr(Connection) -i close表示首部字段Connection的值是否为不区分大小写的close。hdr(Host) -i www.longshuai.com表示首部字段Host的值是否为www.longshuai.com,即请求的主机是否是指定的值。 hdr_reg(HEADER):检查首部字段是否匹配指定的模式。如hdr_reg(Host) -i .*\.longshuai\.com。 http_first_req:当正处理的请求是第一个请求时返回true。 method:请求的方法为指定的方法时返回方法对应的数值,也就表示true。例如"method GET"。
-
acl valid_method method GET http-request deny if ! valid_method
path:匹配uri的path部分,一般用来匹配精确的文件资源。例如path -i /a.png。 path_beg:匹配path的前缀部分。 path_end:匹配path的后缀部分。 path_reg:使用正则表达式来匹配path。 url:对整个url进行匹配。 url_beg:对url的前缀进行匹配。
多个条件使用"AND"、"OR"、"!"操作符表示逻辑与、逻辑或和取反,不写时默认的操作符是"AND"。 acl url_static path_beg /static /images /img /css /viedo /download # 定义静态检查标准 acl url_static path_end .gif .png .jpg .css .js .bmp # 定义静态检查标准 acl host_www path /index.html # 为主页专门定制acl acl url_dynamic path_end .php .php5 # 定义动态检查标准 acl host_www hdr_beg(Host) -i www.longshuai.com # 定位到主页 use_backend static if url_static use_backend dynamic if url_dynamic use_backend www if host_www
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-02-02 linux centos7安装mysql8
2020-02-02 centos7环境准备