HAProxy理论+实验
目录
1、配置选项
2、配置示例
二、IP透传
1、layer4 与 layer7
(1)四层:IP+PORT转发
(2)七层:协议+内容交换
三、haproxy的ACL应用
1、ACL配置选项
(1)名称
(2)匹配规范
(3)匹配模式
(4)具体操作符
(5)操作对象
2、多个ACL的组合调用方式
(1)多个ACL的逻辑处理
(2)多个ACL调用方式
四、自定义HAProxy错误界面
五、基于HTTP重定向错误页面
六、HAProxy四层负载
七、HAPRoxy https实现
1、证书制作
2、https配置
一、基于cookie的会话保持
cookie value:为当前server指定cookie值,实现基于cookie的会话黏性,相对于基于 source 地址hash 调度算法对客户端的粒度更精准,但同时也加大了haproxy负载,目前此模式使用较少,已经被session共享服务器代替
注意:不支持 tcp mode,使用 http mode
1、配置选项
cookie name [rewrite | insert l prefix ][ indirect ][ nocache ][ postonly ] [preserve ][httponly][secure ][ domain ]*[ maxidle <idle> ][ maxlife ]
name cookie的key名称,用于实现持久连接
insert 插入新的cookie,默认不插入cookie
indirect 如果客户端已经有cookie,则不会再发送cookie信息
nocache 当client和hapoxy之间有缓存服务器(如:CDN)时,不允许中间缓存器缓存cookie,因为这会导致很多经过同一个CDN的请求都发送到同一台后端服务器
2、配置示例
[root@haproxy ~]# dnf install haproxy -y
[root@webserver1 ~]# dnf install nginx -y
[root@webserver2 ~]# dnf install nginx -y[root@webserver1 ~]# echo webserver1 -- 172.25.254.10 > /usr/share/nginx/html/index.html
[root@webserver1 ~]# systemctl enable --now nginx[root@webserver2 ~]# echo webserver2 -- 172.25.254.20 > /usr/share/nginx/html/index.html
[root@webserver2 ~]# systemctl enable --now nginx
3、验证cookie信息
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service
curl访问时指定cookie
二、IP透传
web服务器中需要记录客户端的真实IP地址,用于做访问统计、安全防护、行为分析等场景。
IP透传需用到forwardfor参数
nginx可直接看到IP透传的效果,apache需添加参数才可看到
echo webserver1 - 172.25.254.10 > /var/www/html/index.html systemctl start httpd cat /etc/httpd/logs/access_log # 未添加参数时,看不到真实地址vim /etc/httpd/conf/httpd.conf # 主配置文件,添加 {X-Forwarded-For}
1、layer4 与 layer7
(1)四层:IP+PORT转发
mode tcp
在四层负载设备中,把client发送的报文目标地址(原来是负载均衡设备的IP地址),根据均衡设备设置的选择web服务器的规则选择对应的web服务器IP地址,这样client就可以直接跟此服务器建立TCP连接并发送数据,而四层负载自身不参与建立连接,而和LVS不同,haproxy是伪四层负载均衡,因为haproxy需要分别和前端客户端及后端服务器建立连接
(2)七层:协议+内容交换
mode http
七层负载均衡服务器起了一个反向代理服务器的作用,服务器建立一-次TCP连接要三次握手,而client要访问Web Server要先与七层负载设备进行三次握手后建立TCP连接,把要访问的报文信息发送给七层负载均衡;然后七层负载均衡再根据设置的均衡规则选择特定的 Web Server,然后通过三次握手与此台Web Server建立TCP连接,然后Web Server把需要的数据发送给七层负载均衡设备,负载均衡设备再把数据发送给client;所以,七层负载均衡设备起到了代理服务器的作用,七层代理需要和Client和后端服务器分别建立连接
三、haproxy的ACL应用
访问控制列表ACL,Access Control Lists
是一种基于包过滤的访问控制技术
它可以根据设定的条件对经过服务器传输的数据包进行过滤(条件匹配)即对接收到的报文进行匹配和过滤,基于请求报文头部中的源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等信息内容进行匹配并执行进一步操作,比如允许其通过或丢弃。
1、ACL配置选项
#用ac1来定义或声明一个ac1
acl <aclname> <criterion> [flags] [operator] [<value>]
acl 名称 匹配规范 匹配模式 具体操作符 操作对象类型
(1)名称
acl image_service hdr_dom(host) -i img.magedu.com
#ACL名称,可以使用大字母A-Z、小写字母a-z、数字0-9、冒号:、点·、中横线和下划线,并且严格区分大小写。
(2)匹配规范
定义ACL匹配规范,即:判断条件
hdr string 提取在一个HTTP请求报文的首部
hdr([<name> [,<occ>]]) 完全匹配字符串,header的指定信息,<occ>表示在多值中使用的值的出现次数
hdr_beg([<name> [,<occ>]]) 前缀匹配,header中指定匹配内容的begin
hdr_end[<name> [,<occ>]]) 后缀匹配,header中指定匹配内容end
hdr_dom([<name> [,<occ>]]) 域匹配,header中的domainname(host)
hdr_dir([<name> [,<0CC>]]) 路径匹配,header的uri路径
hdr_len([<name> [,<0CC>]]) 长度匹配,header的长度匹配
hdr_reg([<name> [,<occ>]]) 正则表达式匹配,自定义表达式(regex)模糊匹配
hdr_sub([<name> [,<occ>]]) 子串匹配,header中的uri模糊匹配 模糊匹配#示例:
hdr(<string>) 用于测试请求头部首部指定内容
hdr_dom(host) 请求的host名称,如www.zx.org
hdr_beg(host) 请求的host开头,如www. img. video. download. ftp.
hdr_end(host) 请求的host结尾,如.com. net .cn
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service
在Windows C:\Windows\System32\drivers\etc\hosts里添加解析
基于域名的访问(有域名解析)
base :string
#返回第一个主机头和请求的路径部分的连接,该请求从主机名开始,并在问号之前结束,对虚拟主机有用<scheme>://<user>:<password>@#<host>:<port>/<path>;<params>#?<query>#<frag>base :exact string match
base_beg:prefix match
base_dir:subdir match
base dom:domain match
base end:suffix match
base len:length match
base_reg:regex match
base sub:substring matchpathstring
#提取请求的URL路径,该路径从第一个斜杠开始,并在问号之前结束(无主机部分)
<scheme>://<user>:<password>@<host>:<port>#/<path>;<params>#?<query>#<frag>
path :exact string match
path_beg :prefix match #请求的URL开头,如/static、/images、/img、/css
path end :suffix match #请求的URL中资源的结尾,如gif.png.cssjs.jpg .jpeg
path_dom:domain match
path_dir:subdir match
path len:length match
path_reg:regex match
path_sub:substring matchurl :string
#提取请求中的整个URL。一个典型的应用是具有预取能力的缓存,以及需要从数据库聚合多个信息并将它们保存在缓存中的网页门户入口,推荐使用path
url:exact string match
url beg :prefix match
url_dir :subdir match
url_dom :domain match
url_end : suffix match
ur1_len :length match
url_reg :regex match
url_sub :substring matchdst #目标IP
dst_port #目标PORT
Src #源IP
src_port #源PORT
(3)匹配模式
-i 不区分大小写
-m 使用指定的正则表达式匹配方法
-n 不做DNS解析
-u 禁止ac1重名,否则多个同名ACL匹配或关系
(4)具体操作符
整数比较:eq、ge、gt、le、lt
字符比较:
-exact match (-m str):字符串必须完全匹配模式
-substring match (-m sub):在提取的字符串中查找模式,如果其中任何一个被发现,ACL将匹配
- prefix match (-m beg):在提取的字符串首部中查找模式,如果其中任何一个被发现,ACL将匹配
- suffix match (-m end):将模式与提取字符串的尾部进行比较,如果其中任何一个匹配,则ACL进行匹配
- subdir match (-m dir):查看提取出来的用斜线分隔(“/")的字符串,如其中任一个匹配,则ACL进行匹配
-domain match (-m dom):查找提取的用点(“.")分隔字符串,如果其中任何一个匹配,则ACL进行匹配
(5)操作对象
The AcL engine can match these types against patterns of the following types :
-Boolean #布尔值
-integer or integer range #整数或整数范围,比如用于匹配端口范围
-IP address /network #IP地址或IP范围,192.168.0.1,192.168.0.1/24
-string-->zx.org
exact #精确比较
substring #子串
suffix #后缀比较
prefix #前缀比较
subdir #路径,/wp-includes/js/jquery/jquery.js
domain #域名,www.timinglee.org
-regular expression #正则表达式
-hex block #16进制
2、多个ACL的组合调用方式
(1)多个ACL的逻辑处理
与:隐式(默认)使用
或:使用“or”或“|"表示
否定:使用"!”表示
(2)多个ACL调用方式
if valid_src valid_port #与关系,ACL中A和B都要满足为true,默认为与
if invalid_src || valid_port #或,ACL中A或者B满足一个为true
if !invalid src #非,取反,不满足ACL才为true
四、自定义HAProxy错误界面
关闭后端的RS主机然后用浏览器去访问172.25.254.100
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service
五、基于HTTP重定向错误页面
浏览器访问172.25.254.100自动跳转到百度
六、HAProxy四层负载
如果使用frontend和backend,一定在 frontend 和 backend 段中都指定mode tcp
listen mysql—port
bind *:3306
mode tcp
balance leastconn
server web1 172.25.254.10:3306 check
server web2 172.25.254.20:3306 check backup或者使用frontend和backend实
frontend mysql_port
bind :3306
mode tcp
use_backend mysqi_rsbackend mysql_rs
mode tcp
balance leastconn
server web1 172.25.254.10:3306 check
server web2 172.25.254.20:3306 check
在后端服务器安装和配置mariadb服务
yum install mariadb-server
在另一台主机webserver2也做同样设置,将server-id设为2
[root@webserver1 ~]# mysql -e "grant all on *.* to zx@'%' identified by 'zx';"
[root@webserver2 ~]# mysql -e "grant all on *.* to zx@'%' identified by 'zx';"
[root@webserver1 ~]# mysql -uzx -pzx -h 172.25.254.100 -e "show variables like 'hostname'"
七、HAPRoxy https实现
haproxy可以实现https的证书安全,从用户到haproxy为https,从haproxy到后端服务器用http通信但基于性能考虑,生产中证书都是在后端服务器比如nginx上实现
1、证书制作
[root@haproxy ~]# mkdir -p /etc/haproxy/certs
[root@haproxy ~]# openssl req -newkey rsa:2048 --nodes -sha256 -keyout /etc/haproxy/certs/zx.org.key -x509 -days 365
2、https配置
frontend webserverbind *:80redirect scheme https if!{ssl_fc }mode httpuse backend webclusterfrontend webserver-httpsbind *:443 ssl crt/etc/haproxy/certs/zx.pemmode httpuse_backend webclusterbackend webclustermode httpbalance roundrobinserver webl 172.25.254.10:80 check inter 3s fall 3 rise 5server web2 172.25.254.20:80 check inter 3s fall 3 rise 5
[root@haproxy ~]# curl -IKL https://172.25.254.100
相关文章:

HAProxy理论+实验
目录 一、基于cookie的会话保持 1、配置选项 2、配置示例 3、验证cookie信息 二、IP透传 1、layer4 与 layer7 (1)四层:IPPORT转发 (2)七层:协议内容交换 三、haproxy的ACL应用 1、ACL配置选项 (1…...

Spring Boot ⽇志
1. ⽇志概述 为什么要学习⽇志 ⽇志对我们来说并不陌⽣, 从JavaSE部分, 我们就在使⽤ System.out.print 来打印⽇志了. 通过打 印⽇志来发现和定位问题, 或者根据⽇志来分析程序的运⾏过程. 在Spring的学习中, 也经常根据控制台 的⽇志来分析和定位问题. 随着项⽬的复杂…...

最详细!教你学习haproxy七层代理
一、工作原理 (1)包括 监听端口:HAProxy 会在指定的端口上监听客户端的请求。 例如,它可以监听常见的 HTTP 和 HTTPS 端口,等待客户端连接。请求接收:当客户端发起请求时,HAProxy 接收到请求。…...

ElementUI 事件回调函数传参技巧与自定义参数应用
ElementUI 事件回调函数传参技巧与自定义参数应用 在使用elementUI时,事件回调函数传递参数是一个常见的需求。根据搜索结果,我们可以了解到两种主要的方法来传递自定义参数: 使用回调函数:当elementUI组件触发事件时,…...

优化Next的webpack配置
众所周知,next的webpack打包实际上分成了两个部分,一个是服务器端、一个是客户端,我们这里的配置主要是针对客户端的配置。 目的在于降低_app.js包大小,合理划分基础包、工具包、常用方法包、拆分lodash按需引入效果。 拆分lodas…...

Q-Dir vs 传统文件管理器:为何开发者更偏爱这款神器?
前言 在这个信息爆炸的时代,我们每天都在与海量的文件和文件夹打交道;你是否曾经为了找一个文件而翻遍了整个硬盘?是否因为繁琐的文件夹操作而头疼不已?今天,就让我小江湖带你走进一个全新的世界——Q-Dir,…...

日常疑问小记录
1、在抢票过程中,有些人显示服务器崩溃而另一些人仍能访问,可能是由于以下几个原因: (1)负载均衡:服务器可能采用了负载均衡技术,将用户请求分配到多个服务器上。部分用户可能被引导到正常运行…...

Java Web —— 第四天(HTTP协议,Tomcat)
HTTP-概述 概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则 特点: 1. 基于TCP协议:面向连接,安全 2.基于请求-响应模型的:一次请求对应一次响应 3. HTTP协议是无状态的协议: 对于事务处理没有…...

C++ list的基本使用
目录 1.list简要介绍 2. list的构造 3. list中迭代器的使用 (1). 双向迭代器与随机访问迭代器使用区别 4.判空、获取元素个数 5. list头、尾元素的访问 6. 插入与删除操作 (1). 头插头删,尾插尾删 (2). 插入,删除与清空 (3). 交换 7. list容器迭代…...

云中韧性:Spring Cloud服务调用重试机制深度解析
标题:云中韧性:Spring Cloud服务调用重试机制深度解析 在微服务架构中,服务间的调用可能会因为网络问题、服务不可达、资源竞争等原因失败。Spring Cloud作为微服务架构的主流实现框架,提供了一套完整的服务调用重试机制…...

83.SAP ABAP从前台找字段所在表的两种方法整理笔记
目录 方法1:F1查看技术信息 F1 技术信息 方法2:ST05开启跟踪 Activate Trace Input and save data Deactivate Trace Display Trace 分析你想要的表 方法1:F1查看技术信息 从前台找一个屏幕字段所在表,一般通过按F1来查找…...

docker为普通用户设置sudo权限
在 Linux 上使用 Docker 命令时,默认情况下需要 sudo 权限。这是因为 Docker 守护进程(Docker daemon)通常运行在 root 用户下,而访问和管理 Docker 守护进程的权限也默认被限制给 root 用户。 然而,为了方便日常使用…...

Nginx + PHP 8.0支持视频上传
在 Ubuntu 20.04 上配置 Nginx PHP 8.0 的架构以支持视频上传,需要从 Nginx 和 PHP 两个方面进行配置,以确保服务器能够处理大文件上传。以下是详细的步骤: 1. Nginx 配置 1.1 增加上传文件大小限制 默认情况下,Nginx 对上传文…...

MySQL基础详解(3)
文章目录 索引普通索引创建索引修改表结构(添加索引)创建表的时候直接指定删除索引的语法 唯一索引创建索引修改表结构创建表的时候直接指定 使用ALTER 命令添加和删除索引使用ALTER 命令添加和删除主键显示索引信息 约束非空约束:唯一约束:主键约束&…...

傅里叶变换结合数学形态学进行边缘增强和边缘提取
一、前言 傅里叶变换是图像变换的一种常用方法,傅里叶变换在图像处理中扮演着核心角色,它通过将图像从空间域转换到频率域,获取图像的频率成分,因为有些特征在空间域很难处理,但在频率域比较容易处理。这一转换有助于分…...

Haproxy的ACL介绍及应用实例
一、ACL介绍 访问控制列表ACL,Access Control Lists) 是一种基于包过滤的访问控制技术 它可以根据设定的条件对经过服务器传输的数据包进行过滤(条件匹配)即对接收到的报文进行匹配和过 滤,基于请求报文头部中的源地址、源端口、目标地址、目…...

final finally finalize 区别?
final: final 是一个修饰符,可以用于类、方法和变量。当final修饰类时,表示该类不能被继承。当final修饰方法时,表示该方法不能被子类覆盖(重写)。当final修饰变量时,表示该变量是一个常量,其值…...

C语言常用的内存函数
在上一篇博客中我为大家分享了一些常用的字符串函数,以及它们的用法和模拟实现。通过字符串函数中的strcpy,我们能够做到将一个字符串中的内容拷贝到另一个字符串上,可如果有一天我们想把一个整型数组中的内容拷贝到另一个整型数组中呢&#…...

MP4 H.264 MPEG-4 MPEG-2
MP4 视频编解码技术 H.264 MPEG-4 MPEG-2 MP4 (MPEG-4 Part 14): Format: A digital multimedia container format.Use: Often used to store video, audio, subtitles, and still images.Compression: Can use different codecs, such as H.264, for video compression. H.264…...

nvm 切换、安装 Node.js 版本
nvm下载路径 往下拉找到Assets 下载后,找到nvm-setup.exe双击,一直无脑下一步,即可安装成功。 配置环境变量(我的是window11) 打开任务栏设置–搜环境变量 配置好后,点确定一层一层关闭 windowR 打开控制…...

基于区块链的合同存证应用开发
基于区块链的合同存证应用开发 任务一:环境准备 1.启动区块链网络 目录: /root/xuperchain/output/ 启动区块链网络 bash constrol.sh start2.创建钱包账户 目录: /root/xuperchain/output/ 创建tenant, landlord钱包账户,命令如下: bin/xchain-cli account newke…...

每日一题~ abc 365 E 异或运算(拆位+贡献)
处理位运算常用的方法: 拆位法(一位一位的处理,通常题目中会给出元素的最大是2的的多少次幂,当然也有给10的次幂的,自己注意一下就可以了) 常用的思想 : 算贡献。 异或的性质: A^A0 …...

前端八股文笔记【三】
JavaScript 基础题型 1.JS的基本数据类型有哪些 基本数据类型:String,Number,Boolean,Nndefined,NULL,Symbol,Bigint 引用数据类型:object NaN是一个数值类型,但不是…...

AI学习记录 - transformer的Embedding层
创作不易,免费的赞 前面有介绍了GPT2如何进行token化的过程,现在讲下transformer的Embedding层 Embedding层就是一个巨大的矩阵,边长分别是词汇表长度和词向量维度,矩阵里面的每一个数字都是一个随机初始化的,或者是…...

23-PCB封装名称的统一添加与管理
1.进入封装管理器 2. 选择对象,点击右侧添加按钮 3. 搜索所需要的封装 4.接受创建变更 5.执行变更 6.关闭...

【Python从入门到进阶】62、Pandas中DataFrame对象案例实践
接上篇《61、Pandas中DataFrame对象的操作(二)》 上一篇我们讲解DataFrame对象的统计分析、可视化以及数据导出与保存相关内容。本篇我们延续之前学习的DataFrame对象的知识,结合一个数据案例进行实践操作。 一、案例说明 我们将通过一个股…...

使用Python实现深度学习模型:智能环境监测与预警
介绍 智能环境监测与预警是保护生态环境和人类健康的重要手段。通过深度学习技术,我们可以实时获取环境数据,分析环境变化趋势,及时发出预警。本文将介绍如何使用Python和深度学习库TensorFlow与Keras来构建一个简单的环境监测与预警模型。 环境准备 首先,我们需要安装必…...

ThreadLocal的使用场景是什么
ThreadLocal 是 Java 中用于实现线程局部变量的工具,它提供了每个线程独立的变量副本,使得不同线程对该变量的操作不会相互干扰。以下是 ThreadLocal 的常见使用场景: 线程安全的对象共享: ThreadLocal 可以用来避免线程间共享状…...

【网络爬虫篇】逆向实战—某东:滑块验证码(逆向登录)2024.8.7最新发布,包干货,包详细
【网络爬虫篇】更多优秀文章借鉴: 1. 使用Selenium实现黑马头条滑块自动登录 2. 使用多线程采集爬取豆瓣top250电影榜 3. 使用Scrapy爬取去哪儿网游记数据 4. 数据采集技术综合项目实战1:国家水稻网数据采集与分析 5. 数据采集技术综合项目实战2&#x…...

为什么优质的酱香白酒都会带点苦味?
大家好,我是酱酒亮哥,不知大家有没有发现,在制作一杯美味的咖啡或是烘焙一块香脆的面包时,制作过程中都会有一些独特的味道和香气产生,对吧?同样地,酱香白酒的酿造过程也是一个复杂而精细的化学…...