【开发日记】换掉Nginx,使用HAProxy作为反向代理服务器

news2024/11/23 17:51:22

HAProxy,全称为 "High Availability Proxy",是一款开源的、高性能的负载均衡器和代理服务器。主要用于改善应用程序的可用性、可靠性和性能。

与大众熟知的Nginx相比各有优缺点,如果你需要的是一个Web服务器,还是首选Nginx,虽然HAProxy也能实现相同效果,但却需要通过十分繁琐的配置才能达到与Nginx相同的水平。

HAProxy最擅长的还是负载均衡、限流、反向代理,在这些方向HAProxy的性能是明显高于Nginx的。

最重要的是Nginx有一个致命的问题就是作为反向代理服务器时有DNS缓存,并且即使配置了DNS缓存有效时间也不能生效,当然也有可能是我的打开方式不对。

下面是我使用HAProxy作为反向代理服务器的一个案例,可进行参考。

1、运行环境

操作系统:Ubuntu 20.04

HAProxy版本:HAProxy 2.6.16

2、安装HAProxy

sudo apt-get update
sudo apt-get install haproxy

3、配置文件

HAProxy的配置文件路径位于/etc/haproxy/haproxy.cfg

先把配置文件的全部内容放出来,下面对配置内容进行说明:

global
    chroot /var/lib/haproxy
    daemon
    resolvers mydns
        nameserver dns1 223.5.5.5:53
        nameserver dns2 114.114.114.114:53
        hold valid 120s
 
defaults
    log global
    mode http
    option httplog
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

frontend https_front
    bind *:443 ssl crt /etc/haproxy/test.cn.pem
    acl url_online path_beg /online
    use_backend online_backend if url_online

frontend http_front
    bind *:80
    acl url_online path_beg /online
    use_backend online_backend if url_online

backend online_backend
    http-request set-header X-Real-IP %[src]
    http-request set-path %[path,regsub(^/online/,/)]
    server tworice www.test.com:8002 check resolvers mydns resolve-prefer ipv4

4、全局参数

在 HAProxy 配置文件中,global 部分用于设置全局参数,这些参数会影响 HAProxy 的整体运行方式。

global
    chroot /var/lib/haproxy
    daemon
    resolvers mydns
        nameserver dns1 223.5.5.5:53
        nameserver dns2 114.114.114.114:53
        hold valid 120s

在如上配置中,chroot /var/lib/haproxy表示将HAProxy 的运行环境隔离到指定的目录,这样攻击者就无法访问运行环境之外的文件系统了。

daemon表示HAProxy 以守护后台进程模式运行。

resolvers mydns ...表示指定DNS服务器,并且DNS缓存最多保存120秒。

5、默认参数

在 HAProxy 的配置中,defaults 用于定义默认设置。这部分的设置会应用于配置文件中后续定义的所有 frontend 和 backend 部分,但可以被覆盖。

defaults
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

mode http表示当前工作模式为 HTTP 模式,用于HTTP 负载均衡器或 HTTP 反向代理。

timeout connect 5000ms表示HAProxy 尝试与后端服务器建立连接的最大等待时间。

timeout client 50000ms表示客户端与 HAProxy 之间的最大闲置连接时间。

timeout server 50000ms表示HAProxy 与后端服务器之间的最大闲置连接时间。

6、前端部分

前端部分表示HAProxy 接收进入连接的入口点。在前端部分定义如何处理进入的客户端请求。

bind *:443 ssl crt /etc/haproxy/test.cn.pem

以上配置表示监听443端口,并且指定了SSL证书。

acl url_online path_beg /online

以上配置表示创建了一个名为url_online的访问控制项,用于检查进入请求的 URL 路径是否以 /online 开头。

use_backend online_backend if url_online

以上配置表示如果满足名为url_online的访问控制项条件后将流量转发到名为online_backend的后端部分。

7、后端部分

后端部分表示HAProxy定义处理请求的服务器配置。

http-request set-header X-Real-IP %[src]

以上配置表示将请求头中的X-Real-IP参数设置为请求的源IP地址。

http-request set-path %[path,regsub(^/online/,/)]

以上配置表示修改请求路径内容,将路径中的/online/替换为/。原始请求路径为 /online/example,修改后的路径将变为 /example

server tworice www.test.com:8002 check resolvers mydns resolve-prefer ipv4

以上配置定义了一个名为tworice后台服务器,服务器的地址为www.test.com:8002check表示定期检查该服务器的健康状况;resolvers mydns表示使用我们在全部参数中设置的DNS解析器来解析该服务器域名;resolve-prefer ipv4表示解析DNS时优先使用IPv4地址。

8、SSL证书

配置文件中使用到的SSL证书用的是阿里云的免费证书,下载证书时候选择Apache服务器类型,如下图所示。

图片

下载SSL证书

下载完成后进行解压,解压后会得到如下几个文件:test.com_chain.crttest.com.keytest.com_public.crt

使用如下命令生成HAProxy需要的密钥文件:

cat test.com_public.crt test.com_chain.crt test.com.key > /etc/haproxy/test.com.pem

命令中的文件路径请根据自己的文件路径调整。

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

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

相关文章

GitHub README-Template.md - README.md 模板

GitHub README-Template.md - README.md 模板 1. README-Template.md 预览模式2. README-Template.md 编辑模式References A template to make good README.md. https://gist.github.com/PurpleBooth/109311bb0361f32d87a2 1. README-Template.md 预览模式 2. README-Templat…

AI对比:ChatGPT和文心一言的区别和差异

目录 一、ChatGPT和文心一言大模型的对比分析 1.1 二者训练的数据情况分析 1.2 训练大模型数据规模和参数对比 1.3 二者3.5版本大模型对比总结 二、ChatGPT和文心一言功能对比分析 2.1 二者产品提供的功能情况分析 2.2 测试一下各种功能的特性 2.2.1 文本创作能力 2.2…

websocket服务端本地部署

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

Samtec微波、毫米波连接器系统实现卓越性能

【摘要/前言】 在IMS 2023展会上,Samtec 的展台展示了各种尖端产品和技术。其中之一是各种微波、毫米波连接器系统,这些系统性能卓越,令人印象深刻。 Samtec射频设计与仿真工程经理Michael Griesi向我们介绍了演示过程和结果。 【Demo演示】…

Qt5.12.0 与 VS2017 在 .pro文件转.vcxproj文件

一、参考资料 stackoverflow qt - How to generate .sln/.vcproj using qmake - Stack Overflowhttps://stackoverflow.com/questions/2339832/how-to-generate-sln-vcproj-using-qmake?answertabtrending#tab-topqt - 如何使用 qmake 生成 .sln/.vcproj - IT工具网 (coder.wo…

综合小型气象观测站

TH-QC12随着科技的发展,气象观测站已经变得越来越普遍。无论是大规模的国家级气象站,还是小型的气象观测站,它们都为我们的生活和生产提供了重要的气象数据。 综合小型气象观测站,顾名思义,它集成了多种气象观测设备&a…

如何搭建一个短视频社区?这篇文章告诉你

短视频社区是随着手机拍摄和社交媒体的普及而兴起的一种社区形式。 短视频社区通过提供用户生成的短视频内容,并与其他用户互动和分享,为用户提供了一个展示自己才华和创造力的平台。当前已经成为全球范围内的热门社交媒体形式,市场情况非常…

Apache Zeppelin结合Apache Airflow使用1

Apache Zeppelin结合Apache Airflow使用1 文章目录 Apache Zeppelin结合Apache Airflow使用1前言一、安装Airflow二、使用步骤1.目标2.编写DAG2.加载、执行DAG 总结 前言 之前学了Zeppelin的使用,今天开始结合Airflow串任务。 Apache Airflow和Apache Zeppelin是两…

DAY07_SpringBoot—用法整合MyBatis

目录 1 SpringBoot 用法1.1 环境切换1.1.1 业务需求1.1.2 多环境编辑 1.2 热部署1.2.1 需求说明1.2.2 引入jar包1.2.3 配置IDEA环境 2 SpringBoot整合Mybatis2.1 导入数据库2.2 创建SpringBoot项目2.2.1 创建项目2.2.2 生成POM.xml文件如下2.2.3 Mavenjar包作用范围2.2.4 数据源…

面试经验分享 | 工控安全研究员

本文由掌控安全学院 - 徐浩洋 投稿 笔试 进程注入有几种简单描述一下? Windows异常分发流程。 Windows下反调试和反反调试的手段。 使用分页机制下虚拟地址怎么翻译为物理地址。 符号延时加载(DeferredSymbolLoading)的原理? 漏洞触发流程是怎么样的,怎么定位触发点如何进行…

服务器数据恢复—服务器进水导致阵列中磁盘同时掉线的数据恢复案例

服务器数据恢复环境: 数台服务器数台存储阵列柜,共上百块硬盘,划分了数十组lun。 服务器故障&检测: 外部因素导致服务器进水,进水服务器中一组阵列内的所有硬盘同时掉线。 北亚数据恢复工程师到达现场后发现机房内…

OpenMP和MPI环境配置

目录 OpenMP和MPI环境配置OpenMP环境配置MPI环境配置(Windows)MPI环境配置(Ubuntu) 参考资料 OpenMP和MPI环境配置 OpenMP环境配置 首先创建项目,选择C 控制台应用。 选择项目,属性。 在C/C —— 语言中&…

老师家访的目的是什么

家访,对于老师来说,是工作中必不可少的一部分。有人会问,老师家访的目的是什么呢?是为了了解学生的家庭情况,还是为了和家长建立良好的沟通关系?其实,老师家访的目的远不止于此。 老师家访是为…

【MySQL】计算日期是当前月份的第几周

力扣题 1、题目地址 2993. 发生在周五的交易 I 2、模拟表 表:Purchases Column NameTypeuser_idintpurchase_datedateamount_spendint (user_id, purchase_date, amount_spend) 是该表的主键(具有唯一值的列)。purchase_date 的范围从 2023 年 11 月 1 日到 2…

对称图做法,全程动图演示

最终效果: 实现步骤: 其他图形画法: 点线对比图做法,全程动图演示 气泡图做法,全程动图演示 重叠柱状图做法,全程动图演示 瀑布图做法,全程动图演示 对称图做法,全程动图演示

轻松上手:通过阿里云PAI QuickStart微调部署Qwen-72B-Chat模型

作者:熊兮、求伯、一耘 引言 通义千问-72B(Qwen-72B)是阿里云研发的通义千问大模型系列的720亿参数规模模型。Qwen-72B的预训练数据类型多样、覆盖广泛,包括大量网络文本、专业书籍、代码等。Qwen-72B-Chat是在Qwen-72B的基础上…

第一篇【传奇开心果系列】beeware的toga开发移动应用:轮盘抽奖移动应用

系列博文目录 beeware的toga开发移动应用示例系列博文目录一、项目目标二、开发传奇开心果轮盘抽奖安卓应用编程思路三、传奇开心果轮盘抽奖安卓应用示例代码四、补充抽奖逻辑实现五、开发传奇开心果轮盘抽奖苹果手机应用编程思路六、开发传奇开心果轮盘抽奖苹果手机应用示例代…

kafka集群和Filebeat+Kafka+ELK

一、Kafka 概述 1.1 为什么需要消息队列(MQ) 主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。比如大量的请求并发访问数据库,导致行锁表锁,最后请求线程会堆积过多,从…

专业ScrumMaster(高级)- PSM II 认证班,Scrum.org认证PSM II官方认证班

课程简介 Scrum是目前运用最为广泛的敏捷开发方法,是一个轻量级的项目管理和产品研发管理框架,旨在最短时间内交付最大价值。根据2022年全球敏捷状态报告,Scrum的应用占比已经达到87%。 Scrum.org 由 Scrum 的联合创始人 Ken Schwaber 创立…

[亲测有效]CentOS7下安装mysql5.7

前言 近期项目需要搭配mysql一起存储相关数据,但对mysql的版本有要求,于是在服务器搭建了mysql5.7,顺便记录一下搭建步骤和踩坑解决步骤。 目录 前言 一、清除旧安装包 二、安装YUM 三、使用yum命令即可完成安装 四、重新设置密码 五、…