概述
HAProxy是由 WillyTarreau开发的一款具备高可用性、负载均及基于 TCP和 HTTP的应用代理开源软件,基于HAProxy的负载均衡架构是最为常见的免费、快速且具备可靠性的集群负载均衡架构解决方案。
主要功能
- HAProxy实现的是一种事件驱动、单一进程的架构模型,此类模型的优点在于能够支撑高并发大规模的连接。
- HAProxy支持连接拒绝,通过拒绝连接,可以限制某些非法或有意的攻击型连接,从而降低其对网站带来的危害。
- 此外, HAProxy还支持全透明代理,即可以将客户端地址或者任何指定地址直接连接到后端服务器,通过全透明代理,可以不用修改某些特殊服务器地址而使其直接接收并处理部分特定流量。
基本配置
- 配置文件位置:/etc/haproxy/haproxy.cfg
- 配置文件分为:全局功能配置段、默认属性配置段、前端代理配置段、后端负载均衡配置段;
#全局配置
global
daemon
maxconn 4000
Pidfile /var/run/HAproxy.pid
user HAproxy
group HAproxy
stats socket /var/lib/HAproxy/stats
log 127.0.0.1 ocal0
#默认配置
defaults
mode httplog globaloption httplogoption dontlognullretries 3timeout http-request 10stimeout queue 1mtimeout connect 10stimeout client 1mmaxconn 10000
timeout client 1m
timeout server 1m
timeout check 10s
#前端配置
数据库服务前端:frontend vip-db
bind 192.168.142.201:3306
timeout client 90m
default—backend db-vms-Galera
qpid消息服务前端:
froatend Vip-qpid
bind192·168、142·215:5672
timeout client120s
default—backend qpid-vms
dashboard服务前端:
frontendvip—horizon
bind192.168、142·211:80
timeout client180s
cookie SERVERID insert indirect nocache
default backend horizon-vms
#后端配置
backend app
balance roundrobin
server appl 192.168.1.1:80 check
server app2 192.168.1.2:80 check
server app3 192.168.1.3:80 check inter 2s rise 4 fall 3
server app4 192.168.1.4:80 backup
- HAProxy默认不会输出log,需要配置才会进行输出;
acl访问控制
访问控制列表(ACL,Access Control Lists)是应用在路由器(或三层交换机)接口上的指令列表,用来告诉路由器哪些数据可以接收,哪些数据是需要被拒绝并丢弃。
ACL的定义是基于协议的,它适用于所有的路由协议,如IP、IPX等。它在路由器上读取数据包头中的信息,如源地址、目的地址、使用的协议、源端口、目的端口等,并根据预先定义好的规则对包进行过滤,从而达到对网络访问的精确、灵活控制。
########ACL策略定义#########################
1、#如果请求的域名满足正则表达式返回true -i是忽略大小写
acl denali_policy hdr_reg(host) -i ^(www.inbank.com|image.inbank.com)$
2、#如果请求域名满足www.inbank.com 返回 true -i是忽略大小写
acl tm_policy hdr_dom(host) -i www.inbank.com
3、#在请求url中包含sip_apiname=,则此控制策略返回true,否则为false
acl invalid_req url_sub -i sip_apiname=#定义一个名为invalid_req的策略
4、#在请求url中存在timetask作为部分地址路径,则此控制策略返回true,否则返回false
acl timetask_req url_dir -i timetask
5、#当请求的header中Content-length等于0时返回 true
acl missing_cl hdr_cnt(Content-length) eq 0
#########acl策略匹配相应###################
1、#当请求中header中Content-length等于0 阻止请求返回403
block if missing_cl
2、#block表示阻止请求,返回403错误,当前表示如果不满足策略invalid_req,或者满足策略timetask_req,则阻止请求。
block if !invalid_req || timetask_req
3、#当满足denali_policy的策略时使用denali_server的backend
use_backend denali_server if denali_policy
4、#当满足tm_policy的策略时使用tm_server的backend
use_backend tm_server if tm_policy
5、#reqisetbe关键字定义,根据定义的关键字选择backend
reqisetbe ^Host:\ img dynamic
reqisetbe ^[^\ ]*\ /(img|css)/ dynamic
reqisetbe ^[^\ ]*\ /admin/stats stats
6、#以上都不满足的时候使用默认mms_server的backend
default_backend mms
个性化控制
- 限制访问IP
#acl 格式
#acl <aclname> <criterion> [flags] [operator] [<value>] ...
#criterion 包含:dst,dst_port,src,src_port, base : string, path : string, url: string,req.hdr([<name>[,<occ>]]) : string,status: integer
acl acl_name src ip地址
[参考文章](https://www.cnblogs.com/chimeiwangliang/p/8042190.html)
[acl参考](https://www.cnblogs.com/renyz/p/11420435.html)
网友评论