HAProxy配置文件详解和ACL功能(9)

对于response而言,只能用于listen和backend。常用的action是accept、reject和close,前两者表示满足条件时接受或拒绝该响应报文,close表示满足条件时立即关闭和服务端的连接。

1.5 ACL 1.5.1 ACL语法

acl <aclname> <criterion> [flags] [operator] [<value>] ...

aclname:指定acl的名称,在引用时区分大小写。可随意指定,且多个acl指令可以指定同一个aclname,这表示"或"的逻辑关系。
flags:可选项,表示标识位。一般会用到的标识位只有"-i",表示不区分大小写。
operator:可选项,某些操作符,有"eq"、"ge"、"gt"、"le"、"lt",表示数学上的等于、大于、小于。
<criterion>:指定检查标准,即检查方法。见下文给出的常用4层标准和7层标准
value:根据criterion的不同,值的类型不同。

(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 表示首部字段Host的值是否为,即请求的主机是否是指定的值。

hdr_reg(HEADER):检查首部字段是否匹配指定的模式。如hdr_reg(Host) -i .*\.linuxidc\.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的前缀进行匹配。

还有很多很多检查方法,更多的查询官方手册,太多了。一般4层的检查标准和7层对路径path和首部hdr的标准就够了。

多个条件使用"AND"、"OR"、"!"操作符表示逻辑与、逻辑或和取反,不写时默认的操作符是"AND"。

1.5.2 ACL实现动静分离示例

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                   # 定位到主页
use_backend static  if url_static
use_backend dynamic if url_dynamic
use_backend www if host_www

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/8859b78c5f683a11c8d486dc0ccf0c06.html