HAProxy理论+实验

news2024/9/21 16:25:51

目录

一、基于cookie的会话保持

1、配置选项

2、配置示例

3、验证cookie信息 

二、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 match

pathstring
#提取请求的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 match

url :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 match

dst        #目标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_rs

backend 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 webserver
    bind *:80
    redirect scheme https if!{ssl_fc }
    mode http
    use backend webcluster

frontend webserver-https
    bind *:443 ssl crt/etc/haproxy/certs/zx.pem
    mode http
    use_backend webcluster

backend webcluster
    mode http
    balance roundrobin
    server webl 172.25.254.10:80 check inter 3s fall 3 rise 5
    server web2 172.25.254.20:80 check inter 3s fall 3 rise 5
[root@haproxy ~]# curl -IKL https://172.25.254.100

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2042408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

应用案例:劳易测传感器助力宝马集团莱比锡工厂锂电池生产

位于德国萨克森州的宝马集团莱比锡工厂&#xff0c;是全球领先的汽车制造基地之一&#xff0c;不仅生产燃油车&#xff0c;也致力于电动汽车的生产。随着电动汽车及混合动力车辆的普及&#xff0c;锂电池的需求日益增长&#xff0c;宝马集团在莱比锡工厂内部设立了锂电池生产线…

Python之简单了解pylab绘图工具和汇编语言

《Python入门经典以解决计算问题为导向的Python编程实践》89-93页的笔记。 用pylab对数据绘图最小的通用计算 用pylab对数据绘图 PyLab是Matplotlib面向对象绘图库的过程界面。Matplotlib是整个软件包&#xff1b; matplotlib.pyplot是Matplotlib中的一个模块&#xff1b;而P…

能够清理浮毛的宠物空气净化器哪家好用?希喂、安德迈测评分享

虽然已经立秋了&#xff0c;但是现在这个天气还是很热&#xff0c;尤其是还处在南方城市就更加了&#xff0c;天气热空气中的水含量还高&#xff0c;这就代表着即使下雨天能降温但身体还是会有黏黏的感觉。家里养有猫和狗&#xff0c;大汗淋漓的到家&#xff0c;一进门就被我家…

17位著名妈妈和女儿在电影中合作 包括斯特里普、黛米摩尔、安吉丽娜朱莉等

好莱坞母女二人组正在占领大银幕。如今&#xff0c;你不会只在头条新闻中看到她们的名字。这些强大的女性正在联手&#xff0c;创造电影奇迹&#xff0c;并为她们家喻户晓的名字增添更多的明星影响力。 虽然像戈尔迪霍恩和凯特哈德森这样的母女组合更喜欢分开工作&#xff0c;…

Python进阶之3D图形

Python进阶之3D图形 在数据可视化中&#xff0c;2D图形通常可以满足大多数需求。然而&#xff0c;对于一些复杂的数据或分析&#xff0c;3D图形可以提供更多的视角和洞察。在Python中&#xff0c;使用 Matplotlib 和 Plotly 等库可以轻松创建各种3D图形。本文将介绍如何使用这…

C++第一讲:开篇

C第一讲&#xff1a;开篇 1.C历史背景1.1C创世主--本贾尼1.2C版本更新1.3C的重要性1.4C书籍推荐 2.C的第一个程序3.命名空间3.1namespace是什么3.2namespace的使用3.3namespace使用注意事项3.4命名空间的使用 4.C输入和输出5.缺省参数6.函数重载7.引用7.1什么是引用7.2引用的定…

点餐系统软件源码入门教程:从零开始构建你的餐饮系统

随着餐饮行业的数字化转型&#xff0c;点餐系统已经成为餐厅运营不可或缺的一部分。无论是新手开发者还是有经验的程序员&#xff0c;学习如何从零开始构建一个点餐系统&#xff0c;都是一项具有挑战性但又非常有意义的任务。本文将带你逐步了解如何使用基本的技术和代码&#…

E. Lucky Queries

https://codeforces.com/contest/145/problem/E 元素值只有4,7转换成01序列&#xff0c;操作一区间反转,操作二询问类LIS 我们先考虑操作二 应该维护什么量呢 线段树维护量&#xff0c;是通过左子树和右子树的信息合并来维护的 大致有两种情况 可以发现可以通过Leftcnt0Righ…

45.跳跃游戏

&#xff1a;双层for。复杂度n*n n class Solution {public int jump(int[] nums) {// 找到所有的条约方法&#xff0c;返回其中的最小次数// 从后向前&#xff0c;依次记录到最后的次数int n nums.length;if(n 1) return 0;// int[] temp new int[n];// temp[n-1] 0;fo…

Redis远程字典服务器(5) —— hash类型详解

目录 一&#xff0c;hash基本情况 二&#xff0c;hash常用命令详解 2.1 hset&#xff0c;hget&#xff0c;hexists&#xff0c;hdel 2.2 hexists&#xff0c;hdel 2.3 hkeys&#xff0c;hvals 2.4 hgetall&#xff0c;hmget 2.5 hlen&#xff0c;hsetnx 2.6 hincrby&am…

Android逆向题解 攻防世界难度4- Android2.0

Jeb打开apk 关键代码在Native函数getResult IDA 打开 so 发现代码比较简单&#xff0c;可以直接静态分析。 输出字符串也就是flag 长度是15&#xff0c;然后分成三段&#xff0c;第一段是可以整除3&#xff0c;第二段是除3取余1&#xff0c;第三段是除3取余等于2&#xff1…

【Redis进阶】缓存设计模式

目录 Cache Aside&#xff08;旁路缓存&#xff09;模式 概念 读操作流程如上图所示 写操作流程如上图所示 代码示例 总结 Read-Through 模式 概念 操作流程&#xff1a; 优点&#xff1a; Write-Through 模式 概念 操作流程&#xff1a; 优点&#xff1a; Writ…

【摄影后期技巧】连拍多张图像中快速找到最清晰的图像——Python代码实现

手持相机高速连拍过程&#xff0c;当快门速度不够高时不可避免出现模糊帧&#xff0c;通过肉眼去从多张连拍图像中找到最清晰的帧是比较费事的&#xff0c;可通过代码自动去计算最清晰的图像&#xff0c;省去挑选图像的麻烦事&#xff0c;同时也可以将模糊图像剔除掉&#xff0…

【Python学习-UI界面】PyQt5 小部件11-Dialog Button Box 确认与取消框

样式如下: 一个预配置的对话框&#xff0c;带有一个文本字段和两个按钮&#xff0c;OK和取消。在用户单击OK按钮或按下Enter键后&#xff0c;父窗口会在文本框中收集输入。 用户输入可以是数字、字符串或列表中的项。还会显示一个提示用户应该做什么的标签。 常用方法如下&…

详细介绍 Vue3 的 watch 和 watchEffect

在 Vue 3 中&#xff0c;watch 和 watchEffect 都是用于响应式地监听数据变化的工具&#xff0c;但它们有不同的使用场景和工作机制。 1. watch 1、概念 watch 是 Vue 3 提供的一个用于观察响应式数据变化并在数据发生变化时执行特定操作的工具。它通常用于执行副作用&#…

LeetCode 热题 HOT 100 (023/100)【宇宙最简单版】

【技巧】No. 0647 回文子串【中等】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xff…

基于spring boot的疫情信息管理系统

TOC springboot255基于spring boot的疫情信息管理系统 绪论 1.1研究背景与意义 信息化管理模式是将行业中的工作流程由人工服务&#xff0c;逐渐转换为使用计算机技术的信息化管理服务。这种管理模式发展迅速&#xff0c;使用起来非常简单容易&#xff0c;用户甚至不用掌握…

CSC5812C 同步降压5V2.5A DC/DC车载充电方案

CSC5812C 是一款同步降压型的 DC/DC 变换器 IC &#xff0c;CSC5812C输入电压为 8~30V &#xff0c;可取得 2.5A恒定输出电流&#xff0c;开关频率 120kHz 左右&#xff0c;具有良好的瞬态响应和环路稳定性。CSC5812C 外围元器件极少&#xff0c;具有线补、过流保护和热保护功能…

Android全面解析之context机制(二): 从源码角度分析context创建流程(上)

前言 这篇文章从源码角度分析context创建流程。 在上一篇Android全面解析之Context机制(一) :初识context一文中讲解了context的相关实现类。经过前面的讨论&#xff0c;读者对于context在心中有了一定的理解。但始终觉得少点什么&#xff1a;activity是什么时候被创建的&…

IDEA终端无法打开,解决方法

检查终端路径&#xff1a; 确保你的系统终端路径被正确设置在你的开发环境或IDE的配置中。例如&#xff0c;在Windows上&#xff0c;这通常是cmd.exe、PowerShell或Git Bash的路径&#xff1b;在macOS或Linux上&#xff0c;这通常是/bin/bash、/bin/zsh等。 2.权限问题&#…