Bootstrap

Haproxy 的 ACL 规则及实战案例


一、ACL 规则

1.概述

  • 比起使用 LVS 做负载均衡,Haproxy 能提供更加强大的功能
  • 因为 Haproxy 支持 ACL 规则,用于定义三层到七层的规则来匹配一些特殊的请求,实现基于请求报文首部、相应报文内容或者是一些其他状态信息,从而根据需要进行不同的策略转发响应

2.主要功能

可以根据 ACL 规则 完成以下两种主要功能:

  1. 通过设置 ACL 规则来检查客户端请求是否符合规则,将不符合规则要求的请求直接终端
  2. 符合 ACL 规则请求由 backend 指定的后端服务器池执行基于 ACL 规则的负载均衡,不符合的可以直接中断响应,也可以交由其他服务器池执行

3.语法

  • Haproxy 中的 ACL 规则设置在 frontend 部分,语法:
acl 名称 方法 -i [匹配的路径或文件]
  • 说明如下:
    • acl:定义 ACL 规则的关键字,后面需自定义的 ACL 名称,名称区分大小写,也可以重名,这样就可以把多个测试条件设定为一个共同的 ACL
    • 方法:是用来设定实现 ACL 的方法
  • Haproxy 定义的 ACL 常用方法如下:
常用方法 解释
hdr_beg(host) 检测请求报文首部开头部分是否匹配指定的模式
hdr_end(host) 检测请求报文首部结尾部分是否匹配指定的模式
hdr_reg(host) 正则匹配
url_sub 表示请求 url 中包含什么字符串
url_dir 表示请求 url 中存在哪些字符串作为部分地址路径
path_beg 检测请求的 URL 是否匹配路径开头
path_end 检测请求的 URL 是否匹配路径结尾
dst 目标地址
dst_port 目标端口
src 源地址
src_prot 源端口
  • -i:表示忽略大小写,后面需跟上匹配的路径或者文件或者正则表达式,与 ACL 规则一起使用的 Haproxy 选项有 use_backend 和 default_backend,其中use_backend 后面需要设置一个 backend 实例名称,表示在满足 ACL 规则后接收用户请求的后端 backend 服务器池是哪个;此时 default_backend 表示没有满足 ACL 条件的请求默认使用哪个后端 backend 服务器池

二、Haproxy 实现智能负载均衡

  • Haproxy 可以工作在七层模型下,因此可以通过设定 ACL 规则实现 Haproxy 的智能负载均衡
  • 本实例使用了一台 Haproxy 服务器,三台 Web 服务器,模拟搭建了一套 Web 群集,来进行 AC
;