进阶!haproxy高级功能与配置

news2024/11/15 7:45:39

文章目录

  • 前言
  • 基于cookie的会话保持
  • IP透传
    • 四层IP透传
      • 未开启状态
      • 开启透传状态
    • 七层IP透传
  • 自定义错误界面
  • 重定向
  • HAProxy 四层负载之数据库
  • HAProxy https

前言

本文主要介绍HAProxy高级配置及使用案例

文章相关连接如下:

  • 如果想深入了解haproxy算法的相关知识,请点击:超越自我——带你学haproxy算法一遍过!!!
    • 如果想更多了解haproxy的相关知识,请点击:一站式带你深入了解HAProxy

基于cookie的会话保持

  • cookie value:为当前servert指定cookief值,实现基于cookie的会话黏性,相对于基于source地址
  • hash调度算法对客户端的粒度更精准,但同时也加大了haproxy负戟,目前此模式使用较少,已经被session共享服务器代替

不支持tcp mode ,使用http mode

语法格式
cookie name rewrite insert prefix ]indirect nocache ]postonly ]preserve ]httponly secure ]domain ]maxidle <idle>]maxlife

name:		#cookie的key名称,用于实现持久连接
insert:		#插入新的cookie,默认不插入cookie
indirect:	#如果客户端已经有cookie,则不会再发送cookie信息
nocache:	#当c1ient和hapoxy.之间有缓存服务器(如:CDN)时,不允许中间缓存器缓存cookie,
			#因为这会导致很多经过同一个CDN的请求都发送到同一台后端服务器

配置:

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
[root@haproxy ~]# systemctl restart haproxy.service

在这里插入图片描述
验证:
通过命令行验证:
在这里插入图片描述
注意:需要做window的本地解析:路径C:\Windows\System32\drivers\etc\hosts
在这里插入图片描述

IP透传

wb服务器中需要记录客户端的真实IP地址,用于做访问统计、安全护、行为分析、区域排行等场景。

四层:IP+PORT转发
七层:协议+内容交换

四层IP透传

未开启状态

未开启透传的四层代理时查看/etc/nginx/nginx.conf

[root@webserver1 ~]# vim /etc/nginx/nginx.conf

在这里插入图片描述
看不到访问服务器的源IP地址
100主机访问,在10日志查看

[root@haproxy ~]# curl 172.25.254.100

在这里插入图片描述

[root@webserver1 ~]# tail -n 3 /var/log/nginx/access.log

在这里插入图片描述

开启透传状态

nginx配置:在访问日志中通过变量$proxy._protocol._addr记录透传过来的客户端IP
lproxy._protoco1; #启用此项,将无法直接访问此网站,只能通过四层代理

[root@webserver1 ~]# vim /etc/nginx/nginx.conf
[root@webserver1 ~]# systemctl restart nginx.service 

# 修改haproxy
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 
[root@haproxy ~]# systemctl restart haproxy.service

在这里插入图片描述
在这里插入图片描述
验证:

在这里插入图片描述

七层IP透传

  • 当haproxy工作在七层的时候,也可以透传客户端真实IP至后端服务器
  • send-proxy 设置成代理
[root@webserver1 ~]# vim /etc/nginx/nginx.conf
[root@webserver1 ~]# systemctl restart nginx.service 

# 修改haproxy
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 
[root@haproxy ~]# systemctl restart haproxy.service

在这里插入图片描述
在这里插入图片描述

修改nginx
在这里插入图片描述
结果验证:
在这里插入图片描述

自定义错误界面

[root@haproxy ~]# mkdir /etc/haproxy/errorpage -p
[root@haproxy ~]# vim /etc/haproxy/errorpage/badpage.http
[root@haproxy ~]# systemctl restart httpd

修改自定义日志的内容

[root@haproxy ~]# vim /etc/haproxy/errorpage/badpage.http

在这里插入图片描述
修改haproxy自定日志路径
在这里插入图片描述
验证前需关闭两台服务器的服务

[root@webserver1 ~]# systemctl stop nginx.service
[root@webserver22 ~]# systemctl stop nginx.service

验证:
在这里插入图片描述

重定向

接着自定义日志的环境继续修改实验

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 
[root@haproxy ~]# systemctl restart haproxy.service

在这里插入图片描述
验证:
在这里插入图片描述
在这里插入图片描述

HAProxy 四层负载之数据库

应用场景:针对除HTTP以外的TCP协议应用服务访问 1.MySQL 2.Redis 3.Memcache 4.RabbitMQ

重新开启服务

[root@webserver1 ~]# systemctl restart nginx.service
[root@webserver22 ~]# systemctl restart nginx.service

下载数据库客户端

[root@haproxy ~]# dnf install mariadb -y

服务器下载数据库服务端

[root@webserver1 ~]# dnf install mariadb-server -y
[root@webserver22 ~]# dnf install mariadb-server -y

修改haproxy

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 
[root@haproxy ~]# systemctl restart haproxy.service

在这里插入图片描述

更改数据库id,方便实验结果显示
在这里插入图片描述
在这里插入图片描述

在10服务器上的数据库操作

查看id是否修改正确
在这里插入图片描述
添加用户lee,并赋予远程登陆权限,设置密码为lee
在这里插入图片描述
给用户lee赋予访问所以数据库和所以表的权限,
在这里插入图片描述

在20服务器上的数据库操作

查看id是否修改正确
在这里插入图片描述

添加用户lee,并赋予远程登陆权限,设置密码为lee
在这里插入图片描述
给用户lee赋予访问所以数据库和所以表的权限,
在这里插入图片描述

HAProxy https

haproxy可以实现https的证书安全,从用户到naproxy为https,从naproxy到后端服务器用http通信
但基于性能考虑,生产中证书都是在后端服务器比如nginx.上实现

#配置HAProxy支持https协议,支持ssl会话;
bind *:443 ssl crt /PATH/TO/SOME_PEM_FILE
#指令 crt 后证书文件为PEM格式,需要同时包含证书和所有私钥
cat demo.key demo.crt > demo.pem
#把80端口的请求重向定443
bind *:80
redirect scheme https if !{ ssl_fc }

制作证书:

[root@haproxy ~]# mkdir /etc/haproxy/certs/
[root@haproxy ~]# openssl req -newkey rsa:2048 -nodes -sha256 -keyout /etc/haproxy/certs/luo.org.key -x509 -days 365 -out /etc/haproxy/certs/luo.org.crt
# 将证书和钥匙放入PEM格式的文件里
[root@haproxy certs]# cat luo.org.crt luo.org.key > wang.org.pem

全站加密:redirect scheme https if !{ ssl_fc }加上这条命令就会自动将80端口的请求重定向到443
在这里插入图片描述

本章内容将持续更新中,敬请期待,关注收藏防止迷路

文章相关连接如下:

  • 如果想深入了解haproxy算法的相关知识,请点击:超越自我——带你学haproxy算法一遍过!!!
    • 如果想更多了解haproxy的相关知识,请点击:一站式带你深入了解HAProxy

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

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

相关文章

基于Python+Django+Vue+Mysql前后端分离的图书管理系统

利用空闲休息时间开始自己写了一套图书管理系统。现将源码开源&#xff0c;项目遇到问题 PythonDjangoVue图书管理系统开发全流程 大家好&#xff0c;我是程序员科科&#xff0c;这是我开源的基于PythonDjangoVue的图书管理系统 希望可以帮助想学前后端分离的同学 项目中遇…

积极创新模式,推动智慧场馆建设

智慧场馆是指基于信息技术应用的场馆建设模式&#xff0c;利用物联网、云计算、大数据分析等技术手段&#xff0c;实现场馆资源的管理优化、运营效率的提升以及用户体验的改善。智慧场馆在我国得到了广泛的政策支持和推动&#xff0c;政府出台了一系列鼓励智慧场馆建设的政策措…

Java SIP Client

采用JAIN SIP API实现一个SIP客户端实现向SIP服务器注册。SIP服务器可以为FreeSWITCH也可以为满足GB28181的SIP平台。话不多说直接看注册流程图&#xff1a; 代码实现&#xff1a; 创建maven工程添加依赖 <dependencies><dependency><groupId>javax.sip</…

Apple Maps现在可在Firefox和Mac版Edge浏览器中使用

Apple Maps最初只能在 Windows 版 Safari、Chrome 浏览器和 Edge 浏览器上运行&#xff0c;现在已在其他浏览器上运行&#xff0c;包括 Mac 版 Firefox 和 Edge。经过十多年的等待&#xff0c;Apple Maps于今年 7 月推出了新版地图应用的测试版&#xff0c;但只能在有限的浏览器…

哈希表 - 三数之和

15. 三数之和 方法一&#xff1a;排序双指针 /*** param {number[]} nums* return {number[][]}*/ var threeSum function(nums) {const res [], len nums.length;// 将数组排序nums.sort((a, b) > a - b)for (let i 0; i < len; i) {let l i 1, r len - 1, iNum…

什么是令牌桶算法?工作原理是什么?使用它有哪些优点和注意事项?

大家好&#xff0c;我是鸭鸭&#xff01; 此答案节选自鸭鸭最近弄的面试刷题神器面试鸭 &#xff0c;更多大厂常问面试题&#xff0c;可以点击下面的小程序进行阅读哈&#xff01; 目前这个面试刷题小程序刚出&#xff0c;有网页和小程序双端可以使用&#xff01; 回归面试题…

网络初学者必备:100个基础知识全掌握

网络安全学习路线 如果你对网络安全入门感兴趣&#xff0c;那么你需要的话可以点击这里网络安全重磅福利&#xff1a;入门&进阶全套282G学习资源包免费分享&#xff01; 或者扫描下方csdn官方合作二维码获取哦&#xff01; 1 什么是链接? 链接是指两个设备之间的连接。…

OpenCV 基本使用

OpenCV 基本使用 参考教程&#xff1a; GitHub - gaoxiang12/slambook2: edition 2 of the slambook 1. 安装 OpenCV 1.1 下载 OpenCV 参考教程&#xff1a; 无法定位软件包libjasper-dev的解决办法-CSDN博客 视觉slam14讲ch5 opencv安装 ubuntu20.04_libvtk5-dev-CSDN博…

机器学习——聚类算法K-Means

目录 一、初识聚类 1. 认识聚类算法 2. 聚类的流程 3. 簇内误差平方和 Inertia越小模型越好吗&#xff1f; 二、KMeans介绍 1. 重要参数n_clusters 2. 模型评估指标 &#xff08;1&#xff09;真实标签己知的时候 &#xff08;2&#xff09;真实标签未知的时候 三、s…

Tomcat 最大连接数实现原理

spring boot 内置tomcat设置连接数 max-connections: 5 server:port: 9898servlet:context-path: /testtomcat:connection-timeout: 5000max-connections: 5accept-count: 5 ##初始化连接数量connectionLimitLatch protected LimitLatch initializeConnectionLatch() {if (ma…

【区块链+食品安全】农业产业全过程溯源云平台 | FISCO BCOS应用案例

近年来&#xff0c;食品安全问题频发&#xff0c;尤其疫情期间&#xff0c;海鲜、冷冻畜牧产品的入口安全成为大众关注焦点&#xff0c;追溯、确保相关产品生产、运输、售卖等环节的信息真实、有效&#xff0c;成为保证食品安全的核心环节。浙江天演维真网络科技股份有限公司基…

基于ICMP(Ping)的多线程网络通道监视程序(QT)开发

基于ICMP(Ping)的多线程网络通道监视程序(QT)开发 1、 ICMP原理简介 可参考 ICMP(Ping)功能原理及其C实现简介 。 2、 网络通道监视程序开发 设计原理&#xff1a; 通过PING 功能实现服务器、交换机、网闸等设备的网络检测&#xff0c;判断网络的否可达和TTL计算 。 具备功…

微深节能 库区智能化无人天车管理系统 格雷母线

格雷母线在库区智能化无人天车管理系统的应用中&#xff0c;发挥了至关重要的作用。 一、系统构成与原理 系统构成&#xff1a; 格雷母线高精度位移测量系统主要由格雷母线、天线箱、地址解码器、地址编码器四个核心部分组成。这些组件协同工作&#xff0c;实现对移动设备的精确…

c++41两头堵模型

直接拷到自己的内存空间 字符串反转 递归&#xff1a;参数的入栈模型 函数的调用模型 先被调用的模型后执行 向局部变量拷贝内存 传两个参数 做函数结果

【解析几何笔记】1.课程介绍与要求

听的是B站UP主唐小谦的解析几何课&#xff0c;万年的老计算机专业人也想学数学OWO。 1. 课程介绍与要求 前面都是老师的课程介绍&#xff0c;从板书证明开始记 【证明】在三角形ABC中&#xff0c;D为BC边的中点&#xff0c;证明&#xff1a; ∠ ABC 9 0 ∘ \angle \text{ABC…

出现 AWS ECS 错误:集群中未找到容器实例处理办法?

使用部署docker容器映像&#xff0c;但未创建 EC2 实例的情况下。出现下面错误提示。 “调用 RunTask 操作时发生客户端错误 (InvalidParameterException)&#xff1a;在您的集群中未找到容器实例。” 经过以下的步骤&#xff1a; 1.将 Docker 映像从 Ubuntu 推送到我的 Amazo…

c++ - 特殊类设计

文章目录 一、设计一个不允许拷贝的类二、设计一个只能在堆上实例对象的类三、设计一个只能在栈上创建对象的类四、设计一个不能被继承的类五、设计一个只能创建一个对象的类&#xff08;单例模式&#xff09; 一、设计一个不允许拷贝的类 1、方法一&#xff1a;将拷贝构造和赋…

在Windows上配置VSCode MinGW+CMake(包括C++多线程编程的两套API:posix和win32)

创建目录 首先&#xff0c;需要电脑上安装VSCode, 并且创建三个文件夹&#xff1a;cmake、MinGW-posix、MinGW-w32 文件下载 下载posix-seh posix和win32分别是c多线程变成的两套API,可根据不同需求安装&#xff0c;现在先下载配置环境需要的几个文件 百度搜索MinGW-64 点…

Django 链接MySQL数据库,报错Did you install mysqlclient?

据说是在python3里面&#xff0c;已经用pymysql替换了MySQLdb来进行数据库连接 所以&#xff0c;先安装pymysql pip install pymysql之后为了测试这个问题是否和mysql-connector-c有关系&#xff0c;我提前把这个应用给卸了。 之后在整个项目根目录的init文件内写入以下内容 im…

在docker中进行日志切割

先在Linux中安装docker&#xff0c;然后在docker中安装appnode面板&#xff0c;并进行docker网络端口映射。接着进入docker&#xff0c;进行nginx日志切割。 安装docker 第一步&#xff0c;卸载旧版本docker。 若系统中已安装旧版本docker&#xff0c;则需要卸载旧版本docke…