Rocky8 源码安装 HAProxy
HAProxy 是一款开源的高性能 负载均衡器 和 反向代理 软件,专注于处理高并发流量分发,广泛应用于企业级架构中提升服务的可用性、扩展性和安全性。
一、HAProxy 简介
1.1.HAProxy 是什么?
- 本质:
- 基于 C 语言开发 的轻量级工具,支持四层(TCP/UDP)和七层(HTTP/HTTPS)流量代理。
- 通过 单线程事件驱动模型(Event-Driven)实现高吞吐量,单实例可处理 数百万并发连接。
- 全球知名案例:GitHub、Stack Overflow、Twitter 等均依赖 HAProxy 支撑高流量。
- 核心能力:
- 流量分发:将客户端请求智能分发到多台后端服务器,避免单点过载。
- 健康检查:实时监控后端服务器状态,自动剔除故障节点。
- 安全防护:支持 SSL 终止、IP 黑名单、DDoS 防御等。
- 协议优化:HTTP/2、WebSocket、gRPC 等现代协议支持。
1.2.HAProxy 的核心用途
- 1. 负载均衡(Load Balancing)
- 场景:多台服务器共同承载业务时,HAProxy 按策略分配请求。
- 算法:
- 轮询(Round Robin):均匀分配请求。
- 加权轮询(Weighted Round Robin):根据服务器性能分配权重。
- 最少连接(Least Connections):优先选择负载最轻的服务器。
- 源 IP 哈希(Source IP Hash):确保同一客户端始终访问同一后端。
- 2. 反向代理(Reverse Proxy)
- 功能:
- 隐藏后端服务器真实 IP,提升安全性。
- 缓存静态内容,减少后端负载。
- 支持 SSL 终止(解密 HTTPS 流量后转发明文到后端)。
- 企业案例:对外暴露单一入口,内部路由多个微服务。
- 功能:
- 3. 高可用(High Availability)
- 方案:通过 Keepalived 或 VRRP 实现 HAProxy 主备集群。
- 故障切换:主节点宕机时,备节点自动接管 VIP(虚拟 IP)。
- 4. 流量控制与安全
- 速率限制:防御 CC 攻击,限制单个 IP 的请求频率。
- ACL 规则:基于 URL、Header、IP 等条件过滤非法请求。
- 日志审计:记录详细访问日志,支持 SIEM 分析。
二、编译安装 HAProxy
-
企业版 vs 社区版:
-
企业版:提供商业支持及高级功能(如WAF、高级监控)
-
社区版:开源版本,功能完善,适合大多数场景
-
企业版:HAProxy Technologies | World's Fastest Load Balancer
社区版:HAProxy - The Reliable, High Perf. TCP/HTTP Load Balancer
github:HAProxy · GitHub
2.1.下载源码安装包
编译安装HAProxy 2.0 LTS版本,更多源码包下载地址:http://www.haproxy.org/download/

源码下载指定版本,上图选择下载的版本,右键复制链接,在 Linux 里用 wget 下载
wget https://www.haproxy.org/download/3.0/src/haproxy-3.0.8.tar.gz
2.2.校验文件完整性
对比官网提供的校验值,对比上图的 haproxy-3.0.8.tar.gz.sha256 里面的数值
[root@Rocky-1 ~]# sha256sum haproxy-3.0.8.tar.gz
930ae2c33058e1f497fe62cdaacffab6cab6a91e31ba011a9a2f9fe6c5c4aebc haproxy-3.0.8.tar.gz
2.3.解压安装包
解压安装包到 /etc/local/src/ 目录下
tar xf haproxy-3.0.8.tar.gz -C /usr/local/src/
2.4.布置安装所需环境
解压到指定目录后,进入此目录,可以看到有 INSTALL 官方提供的文档,文档里有安装 HAProxy 所需的环境需求,参考文档,布置好所需的环境,继续完成 HAProxy 的安装
cd /usr/local/src/haproxy-3.0.8/ls
addons BRANCHES CHANGELOG dev examples INSTALL MAINTAINERS README scripts SUBVERS VERDATE
admin BSDmakefile CONTRIBUTING doc include LICENSE Makefile reg-tests src tests VERSIONmore INSTALL
Build environment 环境
查看 INSTALL 文档可以看到,安装环境所需要 make 版本需要 >=3.80,GCC 版本需要 >=4.2

查看 Linux yum 源的 make 和 GCC 软件版本是否符合要求,符合要求就直接用 yum 下载即可,如不符合要求,需要源码下载所需要的软件版本,以供安装 HAProxy 做准备
yum list make
yum list gcc

可以看到 make 和 GCC 软件是满足版本需求的,可以直接使用 yum 安装这两个软件
yum install -y gcc make openssl-devel pcre-devel systemd-devel
gcc是GNU编译器集合,用于编译C代码,HAProxy是用C写的,所以必须有编译器。make是自动化构建工具,根据Makefile来执行编译步骤。openssl-devel提供了SSL/TLS支持,HAProxy如果需要处理HTTPS,就需要这个库。pcre-devel是Perl兼容正则表达式库,HAProxy的ACL和路由规则可能用到正则表达式,所以需要这个。systemd-devel则是为了生成systemd的服务文件,这样用户可以用systemctl管理HAProxy服务。
以下是每个软件包对安装编译 HAProxy 软件的具体作用:
gcc(GNU Compiler Collection)
- 作用:
- HAProxy 是用 C 语言编写的程序,gcc 是 C 语言的编译器,用于将 HAProxy 的源代码编译成可执行的二进制文件。
- 必要性:
- 没有 gcc 则无法完成源码编译,类似于“没有工具就无法组装机器”。
make
- 作用:
- 自动化构建工具,根据 Makefile 文件中的规则执行编译步骤(如调用 gcc 编译源码、链接库文件、生成二进制文件等)。
- 示例:
- 在 HAProxy 源码目录中运行 make 时,会按照预定义的规则完成编译流程。
openssl-devel
- 作用:
- 提供 OpenSSL 开发库(头文件和静态库),支持 HAProxy 的 SSL/TLS 功能(如 HTTPS 代理、SSL 证书管理)。
- 对 HAProxy 的影响:
- 如果未安装此包,HAProxy 将无法启用 USE_OPENSSL=1 功能,导致以下功能缺失:
- 无法处理 HTTPS 流量(SSL 终止或透传)。
- 无法支持 HTTP/2、gRPC 等依赖 TLS 的协议。
pcre-devel
- 作用:
- 提供 Perl 兼容正则表达式(PCRE)开发库,用于 HAProxy 的 ACL 规则(如基于 URL 路径、请求头的路由匹配)。
- 对 HAProxy 的影响:
- 若未安装此包,HAProxy 将无法启用 USE_PCRE=1,导致以下问题:
- 无法使用正则表达式匹配请求内容(如 acl is_api path_reg ^/api/)。
- 动态路由、重写规则等功能受限。
systemd-devel
- 作用:
- 提供 systemd 服务管理支持,用于生成 HAProxy 的 systemd 服务文件(如 /usr/lib/systemd/system/haproxy.service)。
- 对 HAProxy 的影响:
- 如果未安装此包,HAProxy 编译时无法集成 systemd 支持(USE_SYSTEMD=1),导致:
- 需手动编写服务文件。
- 无法通过 systemctl 管理服务(如 systemctl start haproxy)。
解决 Lua 环境
HAProxy 支持基于lua实现功能扩展,lua是一种小巧的脚本语言,于1993年由巴西里约热内卢天主教大 学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组开发,其设计目的是为了嵌入 应用程序中,从而为应用程序提供灵活的扩展和定制功能。
- 作用:HAProxy通过Lua脚本实现动态扩展(如自定义认证、请求改写)
- 版本要求:≥5.3(CentOS7默认Lua 5.1不兼容)
Lua 是一种由 HAProxy 支持的嵌入式编程语言,旨在提供更高级的脚本编写能力。下图可知: Lua 仅支持版本 5.3 及更高版本。

查看 yum 源 Lua 版本
yum list lua

可以看到 yum 源的 Lua 版本是 5.3.4 满足 HAProxy 支持版本 5.3 及更高版本的需求,但是接下来我还是选择使用源码安装 Lua 的方式安装 Lua 的 5.4.7 版本,更高的版本有以下优势:
- 获取最新功能:使用Lua的最新特性,提升脚本的功能和效率。
- 性能优化:新版本可能运行更快,资源使用更高效。
- 安全性:修复已知漏洞,增强安全性。
- 自定义配置:根据需求调整编译选项,优化安装。
- 满足软件依赖:确保 HAProxy 可以使用所需的 Lua 版本。
Lua 官网:www.lua.org
参考安装链接:Lua: download

根据官网文档,下载 Lua 5.4.7 版本,下载步骤如上图
根据上面的 HAProxy INSTALL 文档,把 Lua 安装到 /opt/ 目录下,进入 /opt/lua-5.4.7/ 编译
curl -L -R -O https://www.lua.org/ftp/lua-5.4.7.tar.gz
tar xf lua-5.4.7.tar.gz -C /opt/
cd /opt/lua-5.4.7/
make all list
查看编译安装的 Lua 版本
ln -s /opt/lua-5.4.7/src/lua /usr/sbin/
lua -v
Lua 5.4.7 Copyright (C) 1994-2024 Lua.org, PUC-Rio
2.5.编译安装 HAProxy
以上步骤把编译安装 HAProxy 的环境准备就绪了,接下来进入解压 HAProxy 的目录 /usr/local/src/haproxy-3.0.8 编译
cd /usr/local/src/haproxy-3.0.8/
make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USR_SYSTEMD=1 USE_LUA=1 LUA_INC=/opt/lua-5.4.7/src LUA_LIB=/opt/lua-5.4.7/src
以下是 make 参数的相关解释
make ARCH=x86_64 TARGET=linux-glibc \USE_PCRE=1 \ # 启用PCRE正则库USE_OPENSSL=1 \ # 启用SSL加密USE_ZLIB=1 \ # 支持响应压缩USE_SYSTEMD=1 \ # 集成systemd支持USE_LUA=1 \ # 启用Lua扩展LUA_INC=/opt/lua-5.4.7/src \ # Lua头文件路径LUA_LIB=/opt/lua-5.4.7/src # Lua库路径
自定义 HAProxy 的安装路径
make install PREFIX=/apps/haproxy # 自定义安装路径
tree /apps/haproxy
以下是 tree /apps/haproxy 的目录结构
/apps/haproxy
├── doc
│ └── haproxy
│ ├── 51Degrees-device-detection.txt
│ ├── architecture.txt
│ ├── configuration.txt
│ ├── cookie-options.txt
│ ├── DeviceAtlas-device-detection.txt
│ ├── intro.txt
│ ├── linux-syn-cookies.txt
│ ├── lua.txt
│ ├── management.txt
│ ├── netscaler-client-ip-insertion-protocol.txt
│ ├── network-namespaces.txt
│ ├── peers.txt
│ ├── peers-v2.0.txt
│ ├── proxy-protocol.txt
│ ├── regression-testing.txt
│ ├── seamless_reload.txt
│ ├── SOCKS4.protocol.txt
│ ├── SPOE.txt
│ └── WURFL-device-detection.txt
├── sbin
│ └── haproxy
└── share
└── man
└── man1
└── haproxy.1
创建软连接为了在系统的标准命令搜索路径中能够更方便地访问 /apps/haproxy/sbin/haproxy 这个文件
ln -s /apps/haproxy/sbin/haproxy /usr/sbin/
which haproxy # 验证路径:/usr/sbin/haproxy
三、系统服务配置
3.1.创建服务运行时需要的目录
创建配置文件
在 /etc/haproxy/ 目录下创建 haproxy.cfg 配置文件
vim /etc/haproxy/haproxy.cfg
globalmaxconn 100000 # 最大并发连接数chroot /apps/haproxy # 安全隔离目录stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin # 管理接口user haproxy # 运行用户group haproxy # 运行用户组daemon # 后台模式pidfile /var/lib/haproxy/haproxy.pidlog 127.0.0.1 local2 info # 日志发送到本地syslogdefaultsoption http-keep-alive # 保持长连接option forwardfor # 传递客户端真实IPmaxconn 100000mode http # 默认七层代理模式timeout connect 300000ms # 后端连接超时timeout client 300000ms # 客户端空闲超时timeout server 300000ms # 服务端响应超时listen statsmode httpbind 0.0.0.0:9999 # 监控页面端口stats enablelog globalstats uri /haproxy # 访问路径stats auth haproxy:123456 # 登录凭证
创建存放 pid 文件的目录和 haproxy 用户
mkdir /var/lib/haproxy
useradd -r -s /sbin/nologin -d /var/lib/haproxy haproxy
3.2.创建 systemd 服务文件
在 /usr/lib/systemd/system/ 目录下创建 haproxy.service 系统服务启动脚本,以便我们用源码安装的 HAProxy 软件能用 systemctl 以系统服务的方式启动。内容如下:
cat > /usr/lib/systemd/system/haproxy.service <<EOF
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q # 配置预检
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID # 优雅重载(不断开连接)
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF
3.3.启动服务
重新加载系统服务配置信息,再用 systemctl 系统服务的方式启动 HAProxy 服务
systemctl daemon-reload
systemctl start haproxy
systemctl status haproxy

根据 /etc/haproxy/haproxy.cfg 配置文件里配置的监控页面端口、访问路径、登录凭证,可以通过浏览器访问到(IP:控制页面端口/访问路径)然后输入登录凭证设置的用户名和密码即可登录查看 HAProxy 软件的监控页面,如下图:

相关文章:
Rocky8 源码安装 HAProxy
HAProxy 是一款开源的高性能 负载均衡器 和 反向代理 软件,专注于处理高并发流量分发,广泛应用于企业级架构中提升服务的可用性、扩展性和安全性。 一、HAProxy 简介 1.1.HAProxy 是什么? 本质: 基于 C 语言开发 的轻量级工具&a…...
通过AI辅助生成PPT (by quqi99)
作者:张华 发表于:2025-02-23 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明(http://blog.csdn.net/quqi99) 问题 媳妇需要将一个pdf文件中的某些部分做成PPT课件,我在想是…...
【从0做项目】Java文档搜索引擎(9)烧脑终章!
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 文章导读 零:项目结果展示 一:导入 二:问题引入 1:情…...
什么是 Cloud Studio DeepSeek ; 怎么实现Open WebUI快速体验
什么是 Cloud Studio DeepSeek ;怎么实现Open WebUI快速体验 一、概述 欢迎使用 Cloud Studio DeepSeek 工作空间!我们已为您预装并启动了以下服务,等待加载十几秒即可查看效果: Ollama 服务:支持通过 API 调用 DeepSeek 模型。 AnythingLLM 前端服务:提供交互式聊天界…...
rtconfig.cpython-313.pyc 在 .gitignore文件中写入 *.pyc 文件仍然没有被忽略?
在 .gitignore 文件中添加 *.pyc 和 *.*.pyc 规则时,如果 .pyc 文件仍然没有被忽略,可能有以下几种原因: 1. 已经被 Git 跟踪的文件 即使您在 .gitignore 中指定了忽略 .pyc 文件,Git 仍然会跟踪已经被提交到版本库中的文件。如…...
Linux 第二次脚本作业
1、需求:判断192.168.1.0/24网络中,当前在线的ip有哪些,并编写脚本打印出来。 2、设计一个 Shell 程序,在/userdata 目录下建立50个目录,即 user1~user50,并设置每个目录的权限,其中其他用户的权…...
mysql的源码包安装
安装方式一:(编译好的直接安装) 1.添加一块10G的硬盘,给root逻辑卷扩容 (下面安装方式二有,一模一样的装就行,我就不写了,再写的话篇幅就太长了) 2.下载编译好的源码包…...
《论面向对象的建模及应用》审题技巧 - 系统架构设计师
论面向对象的建模及应用写作框架 一、考点概述 本论题“论面向对象的建模及应用”主要考察软件测试工程师对面向对象建模技术的理解和应用能力。具体涵盖以下几个方面: 面向对象建模的基本概念 :这包括理解面向对象编程(OOP)的基…...
#渗透测试#批量漏洞挖掘#畅捷通T+远程命令执行漏洞
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 一、漏洞概况 二、攻击特征 三、应急处置…...
Sky Hackathon 清水湾的水 AI美食助手
这里写自定义目录标题 视频 视频 video...
【2024 CSDN博客之星】大学四年,我如何在CSDN实现学业与事业的“双逆袭”?
前言: Hello大家好,我是Dream。不知不觉2024年已经过去,自己也马上迈入23岁,感慨时间飞快,从19岁刚入大学加入CSDN,到现在大学毕业已经整整四年了。CSDN陪伴我走过了最青涩的四年大学时光,在这里…...
《AI赋能星际探索:机器人如何开启宇宙新征程!》
在人类对宇宙无尽的探索中,空间探索任务始终充满挑战。从遥远星球的探测,到空间站的维护,每一项任务都需要高精度、高可靠性的操作。人工智能(AI)的迅猛发展,为空间探索机器人带来了革命性的变革࿰…...
06排序 + 查找(D1_排序(D1_基础学习))
目录 学习预热:基础知识 一、什么是排序 二、为什么要排序 三、排序的稳定性 四、排序稳定性的意义 五、排序分类方式 方式一:内外分类 方式二:比较分类 六、排序算法性能评估 1. 算法的时间复杂度 2. 算法的空间复杂度 七、知识小…...
【数据挖掘】深度挖掘
【数据挖掘】深度挖掘 目录:1. 减少样本集的数量知识点示例 2. 对噪声比集剪枝知识点示例建立局部树代码示例(使用 Python 和 scikit - learn 库构建局部决策树)代码解释注意事项 最大超平面定义原理求解方法代码示例(使用 Python…...
【Linux】基于UDP/TCP套接字编程与守护进程
目录 一、网路套接字编程 (一)基础概念 1、源IP地址与目的IP地址 2、端口号 3、TCP与UDP 4、网络字节序 (二)套接字编程接口 1、socket 常见API 2、sockaddr结构 (三)UDP套接字 1、UDP服务器创建…...
C++跳表实现,封装成Skiplist类
跳表 (Skip List) 是由 William Pugh 发明的一种查找数据结构,支持对数据的快速查找,插入和删除。 跳表的期望空间复杂度为O(n) ,跳表的查询,插入和删除操作的期望时间复杂度都为O(logn)。 算法讲解149【扩展】有序表专题2-跳表_哔…...
探索与Cursor协作创建一个完整的前后端分离的项目的最佳实践
探索与Cursor协作创建一个完整的前后端分离的项目的最佳实践 Cursor简介 Cursor在目前代表了AI编程技术的顶峰。在一定程度上可以说是当今AI时代的最强生产力代表。为此,不惜重金开了年费会员来紧跟时代步伐。当然cline、roo code、trae等开源或者免费产品也在紧追不舍。 C…...
【uni-app】对齐胶囊容器组件
代码碎片 <template><div><view :style"{ height: ${statusBarHeight}px }"></view><viewclass"":style"{height: ${menuButtonHeight menuButtonPadding * 2}px,width: ${menuButtonInfo.left}px,}"><slot …...
podman加速器配置,harbor镜像仓库部署
Docker加速器 registries加速器 [rootlocalhost ~]# cat /etc/redhat-release CentOS Stream release 8 [rootlocalhost ~]# cd /etc/containers/ [rootlocalhost containers]# ls certs.d policy.json registries.conf.d storage.conf oci registries.conf re…...
计算机毕业设计SpringBoot+Vue.jst0甘肃非物质文化网站(源码+LW文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
使用Python脚本转换YOLOv5配置文件到https://github.com/ultralytics/ultralytics:一个详细的指南
在深度学习领域,YOLO(You Only Look Once)系列模型因其高效和准确性而广受欢迎。然而,随着项目需求的变化,有时我们需要对预训练模型的配置文件进行调整。本文将详细介绍如何使用Python脚本自动转换YOLOv5的配置文件到…...
简识Kafka集群与RocketMQ集群的核心区别
前记:各位潘安、各位子健/各位彦祖、于晏,文字较多,优先看目录。 Kafka集群与RocketMQ集群的核心区别及架构图例说明 一、核心区别对比 特性Kafka 集群RocketMQ 集群设计目标高吞吐量实时日志流系统(如日志收集、大数据流水线&a…...
制造行业CRM选哪家?中大型企业CRM选型方案
在当今竞争激烈的制造行业中,企业对于客户关系管理(CRM)系统的需求日益增强,高效、智能的CRM系统已成为推动企业业务增长、优化客户体验的关键。在制造业 CRM 市场中,纷享销客和销售易都备受关注,且各自有着…...
R 语言科研绘图 --- 散点图-汇总
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
从零开始的网站搭建(以照片/文本/视频信息通信网站为例)
本文面向已经有一些编程基础(会至少一门编程语言,比如python),但是没有搭建过web应用的人群,会写得尽量细致。重点介绍流程和部署云端的步骤,具体javascript代码怎么写之类的,这里不会涉及。 搭…...
收到线上服务器出现cpu告警一般怎么排查?
当线上服务器出现CPU告警时,可以按照以下步骤进行系统性排查,逐步定位问题根源: 1. 快速确认CPU使用情况 命令工具:top # 实时查看CPU占用(按P排序进程) htop …...
Elasticsearch Open Inference API 增加了对 Jina AI 嵌入和 Rerank 模型的支持
作者:Hemant Malik 及 Joan Fontanals Martnez 探索如何使用 Elasticsearch Open Inference API 访问 Jina AI 模型。 我们在 Jina AI 的朋友们将 Jina AI 的嵌入模型和重新排名产品的原生集成添加到 Elasticsearch 开放推理 API 中。这包括对行业领先的多语言文本嵌…...
Docker下的Elastic search
一、安装 (一)Elastic search 1.创建配置文件 :我是在win系统中,创建文件【G:\dockermount\es\elasticsearch.yml】 添加【http.host: 0.0.0.0】 2. 拉取镜像:docker pull elasticsearch 3. 创建容器(注意我挂载的…...
Unity学习part4
1、ui界面的基础使用 ui可以在2d和矩形工具界面下操作,更方便,画布与游戏窗口的比例一般默认相同 如图所示,图片在画布上显示的位置和在游戏窗口上显示的位置是相同的 渲染模式:屏幕空间--覆盖,指画布覆盖在游戏物体渲…...
Java笔记18
2-10-3Cookie&Session 1.会话跟踪技术概述 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次…...
