基于Haproxy+Keepalived负载均衡高可用架构实现(3)

整数或整数范围:如1024:65535表示从1024至65535;仅支持使用正整数(如果出现类似小数的标识,其为通常为版本测试),且支持使用的操作符有5个,分别为eq、ge、gt、le和lt;

字符串:支持使用"-i"以忽略字符大小写,支持使用"\"进行转义;如果在模式首部出现了-i,可以在其之前使用"--"标志位;

正则表达式:其机制类同字符串匹配;

IP地址及网络地址

同一个acl中可以指定多个测试条件,这些测试条件需要由逻辑操作符指定其关系。条件间的组合测试关系有三种:"与"(默认即为与操作)、"或"(使用"||"操作符)以及"非"(使用"!"操作符)。

Haproxy进行安全加固 通过ACL限制用户请求速率

be_sess_rate(backend) <integer>

be_sess_rate 测试标准

用于测试指定的backend上会话创建的速率(即每秒创建的会话数)是否满足指定的条件;常用于在指定backend上的会话速率过高时将用户请求转发至另外的backend,或用于阻止攻击行为。例如:

backend dynamic

mode http

acl being_scanned be_sess_rate gt 100

redirect location /denied.html if being_scanned

通过ACL指定可访问的用户(定义到frontend段中)

阻断非指定请求

在传输层获取样本,通常是TCP/IP 协议的IP和端口,以及建立连接速率等等。而且此部分样本通常用于

"tcp-request connection"指令中的规则之中。

dst : ip #目标地址

dst_port : integer

src : ip #源地址

src_port : integer

#阻断来自非指定IP的访问80端口的请求

acl myhost src 172.16.100.1

acl myport dst_port 80

tcp-request connection reject if !myhost myport

#还可以用block

block if ! myhost myport

Haproxy实现动静分离功能(在frontend段中定义)

根据用户访问内容实现动静分离

path_beg <string>

用于测试请求的URL是否以<string>指定的模式开头。下面的例子用于测试URL是否以/static、

/images、/javascript或/stylesheets头。

acl url_static path_beg -i /static /images /javascript /stylesheets

path_end <string>

用于测试请求的URL是否以<string>指定的模式结尾。例如,下面的例子用户测试URL是否以jpg、gif、png、css或js结尾。

acl url_static path_end -i .jpg .gif .png .css .js

根据用户访问内容实现动静分离配置实例

frontend http-in

bind *:80

log global

option httpclose

acl url_static path_beg -i /static /images /javascript /stylesheets

acl url_static path_end -i .jpg .jpeg .gif .png .css .js

use_backend static_servers if url_static

default_backend dynamic_servers

backend static_servers

balance roundrobin

server imgsrv1 172.16.200.7:80 check maxconn 6000

server imgsrv2 172.16.200.8:80 check maxconn 6000

backend dynamic_servers

balance source

server websrv1 172.16.200.7:80 check maxconn 1000

server websrv2 172.16.200.8:80 check maxconn 1000

Haproxy实现浏览器控制(在frontend段中定义)

hdr_reg <string>正则匹配请求内容,匹配后可做对应的操作

#阻断火狐浏览器发送的请求

acl firefox hdr_reg(User-Agent) -i .*firefox.*

block if firefox

#将IE用户请求分配到静态服务器

acl ie_useragent hdr_reg(User-Agent) -i .*ie.*

use_backend static_servers if ie_useragent

Haproxy实现真实日志记录

option forwardfor

option forwardfor [ except <network> ] [ header <name> ] [ if-none ]

允许在发往服务器的请求首部中插入"X-Forwarded-For"首部。

<network>:可选参数,当指定时,源地址为匹配至此网络中的请求都禁用此功能。

<name>:可选参数,可使用一个自定义的首部,如"X-Client"来替代"X-Forwarded-For"。有些独特的web服务

器的确需要用于一个独特的首部。

if-none:仅在此首部不存在时才将其添加至请求报文问道中。

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

转载注明出处:https://www.heiqu.com/7ba5cc8030ad3fd865eee3f82c505b2b.html