Centos6源码安装Haproxy进行四层代理

news2024/11/18 4:18:37

一.背景

        公司使用专线与第三方公司进行系统交互,给定了我们业务IP的使用范围,防火墙策略只开放业务IP范围之内的IP地址才能访问,如果源IP不在业务IP范围之内,那么通过互联IP过去是访问不了的。我们的做法是为了不影响现有业务,找一台服务器配置业务IP,然后通过台服务器做4层代理进行转发即可。 四层代理常见的开源方案有Haproxy、Nginx等,Nginx一般用来做7层代理相对较多,不过也支持4层代理。本着最简单和高效的原则,最终选定Haproxy理由如下:

        1.软件体积小,高性能、稳定。

        2.我们的需求只是做4层代理,7层代理不需要,尽管Haproxy也支持7层代理,但是它最初的优势就是4层代理。

        3.专业的事交给专业的人,软件也是如此,强调4层代理建议使用Haproxy而非Nginx, 尽管Nginx也可以做到。

        如果是Centos7安装Haproxy也很简单了,直接yum install haproxy, 配置一下haproxy.cfg,启动systemctl start haproxy即可。 但是之前的系统是Centos6.3, 属于相对很老的系统。Centos6的yum源已经停止更新和支持,不能直接使用yum安装,  所以只能考虑在Centos6上进行源码安装。

二.安装流程

1.下载源码包

  可以下载自己指定的版本, 具体版本下载列表网址: http://www.haproxy.org/

wget http://www.haproxy.org/download/1.4/src/haproxy-1.4.27.tar.gz

2.解压、make


(可以查看README文件,查看make更多预编译参数)

  一般没有特殊参数要求指定,指令2个参数即可:

   TARGET = linux26  #首先查看uname -r,  Linux内核是多少版本,查看README文件可以看到这个参数的解释,我服务的内核版本是2.6,所以使用linux26

   ARCH =  x86_64  #代表服务器是的CPU架构和系统位数, 我的是x86架构,64位操作系统

tar -zxvf haproxy-1.4.27.tar.gz 
cd haproxy-1.4.27 
make TARGET=linux26 ARCH=x86_64

3.预编译make没报错则可以make install

  可以设置PREFIX为软件安装目录

make install PREFIX=/usr/local/haproxy

4.添加service脚本管理服务

直接使用Haproxy命令管理服务不是很方便,我们还是习惯了使用service命令来管理服务。所以我们需要添加一下自定义service, 使用service来管理Haproxy服务。


Centos6可以添加service脚本,用service命令来管理haproxy:

service haproxy check #检查配置文件语法是否正确
service haproxy status #查看服务运行状态
service haproxy start/stop/restart #服务启动、停止、重启

在/etc/init.d/新增haproxy文件(附加可执行权限, chmod +x haproxy),文件内容如下:

#!/bin/sh
#
# haproxy
#
# chkconfig:   - 85 15
# description:  HAProxy is a free, very fast and reliable solution \
#               offering high availability, load balancing, and \
#               proxying for TCP and  HTTP-based applications
# processname: haproxy
# config:      /etc/haproxy/haproxy.cfg
# pidfile:     /var/run/haproxy.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

exec="/usr/local/haproxy/sbin/haproxy"
prog=$(basename $exec)

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

cfgfile=/etc/haproxy/haproxy.cfg
pidfile=/var/run/haproxy.pid
lockfile=/var/lock/subsys/haproxy

check() {
    $exec -c -V -f $cfgfile $OPTIONS
}

start() {
    $exec -c -q -f $cfgfile $OPTIONS
    if [ $? -ne 0 ]; then
        echo "Errors in configuration file, check with $prog check."
        return 1
    fi
 
    echo -n $"Starting $prog: "
    # start it up here, usually something like "daemon $exec"
    daemon $exec -D -f $cfgfile -p $pidfile $OPTIONS
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    # stop it here, often "killproc $prog"
    killproc $prog 
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    $exec -c -q -f $cfgfile $OPTIONS
    if [ $? -ne 0 ]; then
        echo "Errors in configuration file, check with $prog check."
        return 1
    fi
    stop
    start
}

reload() {
    $exec -c -q -f $cfgfile $OPTIONS
    if [ $? -ne 0 ]; then
        echo "Errors in configuration file, check with $prog check."
        return 1
    fi
    echo -n $"Reloading $prog: "
    $exec -D -f $cfgfile -p $pidfile $OPTIONS -sf $(cat $pidfile)
    retval=$?
    echo
    return $retval
}

force_reload() {
    restart
}

fdr_status() {
    status $prog
}

case "$1" in
    start|stop|restart|reload)
        $1
        ;;
    force-reload)
        force_reload
        ;;
    check)
        check
        ;;
    status)
        fdr_status
        ;;
    condrestart|try-restart)
      [ ! -f $lockfile ] || restart
    ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|try-restart|reload|force-reload}"
        exit 2
esac

5.Haproxy.cfg配置文件模板


默认配置文件路径: /etc/haproxy/haproxy.cfg
文件内容样例:

    global
    defaults
        log global
        mode    tcp
        option  dontlognull
            timeout connect 5000
            timeout client  50000
            timeout server  50000

    #监听代理,对方->我方API 转发
    frontend listen-api-in
        bind *:9001
        default_backend listen-api-out

    backend listen-api-out
        server server1 10.23.50.11:9001 maxconn 20480

    #代理转发,我方->对方API 转发
    frontend call-api-in
        bind *:13001
        default_backend call-api-out

    backend call-api-out
        server server1 10.24.112.201:13001 maxconn 20480

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

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

相关文章

完整复现YOLOv8:包括训练、测试、评估、预测阶段【本文源码已开源,地址在文章末尾】

训练过程展示: 目录 1、复现过程1.1、配置开发环境1.2、demo预测实现过程2 、项目实现方法与代码(包括训练、测试、评估、预测阶段)2.1、训练、测试、评估、预测代码适配2.2、同时开始训练、测试、评估、预测2.3、训练完之后进行预测2.4、训练、评估、混淆矩阵、召回曲线等…

Linux 基础常用命令 整理

Shell Shell 这个单词的原意是“外壳”,跟 kernel(内核)相对应,比喻内核外面的一层,即用户跟内核交互的对话界面。 Shell 是一个程序,提供一个与用户对话的环境。这个环境只有一个命令提示符,让…

解读小红书:零食行业用户洞察报告

随着消费持续升级、零食正作为休闲生活的一部分开始走近更多用户。以日趋多元化的消费需求为导向,零食行业用户又透露出哪些消费特征呢? 本期为大家解读小红书官方发布的《「灵感补给站」小红书2023年零食行业用户洞察报告》,基于上千名用户定…

从状态机的角度async和await的实现原理

一. 深度剖析准备:先给VS安装一个插件ILSpy,这样更容易反编译代码进行查看,另外要注意反编译async和await的时候,要把C#代码版本改为4.0哦。1.什么是状态机(1).含义:通常我们所说的状态机(State Machine)指的是有限状态自动机的简称,是现实事…

6.5、文件传送协议FTP

将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中,是一项基本的网络应用,即文件传送。 文件传送协议FTP\color{red}文件传送协议\texttt{FTP}文件传送协议FTP (File Transfer Protocol)是因特网上使用得最广泛的文件传送协议。 FTP 提供…

记录--Vue开发历程---音乐播放器

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 一、audio标签的使用 1、Audio 对象属性 2、对象方法 二、效果 效果如下&#xff1a; 三、代码 代码如下&#xff1a; MusicPlayer.vue <template><div class"music"><!-- 占…

【QFD】质量保证需求

QFD体系把前端商业策略成果和产品有效开发紧密连接起来工具。QFD是强调需求与功能的对应&#xff0c;验证确定的市场需求与产品功能设计的关联性&#xff0c;与功能之间&#xff0c;与需求之间的矛盾性&#xff0c;也叫质量屋。 1.什么是QFD 什么是QFD质量功能展开&#xff0…

代码随想录第59天|503.下一个更大元素II ● 42. 接雨水

503.下一个更大元素2 和下一个更大元素基本相同&#xff0c;就多了一个循环数组的问题 处理方法&#xff1a; 循环的次数*2 利用i%nums.size()得到处理的下标&#xff0c;这样当遍历到nums的最后一个元素的时候&#xff0c;向单调栈中插入其下标nums.size()-1,之后将其与下标n…

C语言进阶(7)——联合体和枚举

文章目录1 枚举1.1 含义1.2 定义1.3 枚举的优点1.4 枚举的使用2 联合体&#xff08;共用体&#xff09;2.1 联合类型的定义2.2 联合体的特点2.3联合体大小的计算1 枚举 1.1 含义 枚举就是一一列举。 1.2 定义 枚举是定义常量&#xff0c;默认值 0&#xff0c;然后数自增。 …

go:快速升级Go版本,我几分钟就解决了

底层依赖升级了&#xff0c;那我们也要跟着升&#xff0c;go版本需要升级到1.18以上&#xff0c;网上对比了一些教程&#xff0c;发现这个方法最便捷快速 目录当前Go版本下载高版本Go登录 [Go官网](https://go.dev/dl/)下载对应版本部署升级Go版本备份旧版本部署新版本当前Go版…

从0到1完成一个Node后端(express)项目(一、初始化项目、安装nodemon)

初识express 因为上个专栏的vue项目&#xff0c;后端是用node写的&#xff0c;所以这里教大家怎么去写 Express 简介&#xff1a; Express 是基于 Node.js 平台&#xff0c;快速、开放、极简的 Web 开发框架通俗的理解: Express 的作用和 Node.is内置的 http 模块类似&#xff…

MongoDB副本详解

概念 MongoDB副本集是一组维护相同数据集的mongod服务&#xff0c;可以提供冗余和高可用&#xff0c;是所有生产部署的基础&#xff1b; mysql主从复制和mongodb副本集的区别 主从复制的主从是固定的&#xff0c;副本集是不固定的&#xff0c;可以自动切换 副本集角色 主节点&a…

prototext format 随机空格

prototext format 随机空格问题简述代码复现解密结论总结问题简述 golang 语言&#xff0c;在使用 prototext 进行 format 的时候&#xff0c;相同的代码输出结果不唯一&#xff0c;有的时候字段之间是两个空格&#xff0c;有的时候是一个空格。 代码 先上pb文件 syntax &…

【寒假每日一题】洛谷 P6414 [COCI2014-2015#1] PROSJEK

题目链接&#xff1a;P6414 [COCI2014-2015#1] PROSJEK - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 有一个数列 a&#xff0c;现在按照下列公式求出一个数列 b&#xff1a; 给你数列 b&#xff0c;请求出数列 a。 输入格式 第一行一个整数 n &#xff0c;表示…

bugku-reverse-入门逆向 Easy_vb re 游戏过关 逆向入门

入门逆向下载文件 解压后 拖入IDA中Easy_vb同样方法 解压后 拖入IDAEasy_re下载解压后 打开似乎有点逗查下壳先拖入IDA 选中这两行字符 转译单击a 得到flag游戏过关下载文件 解压打开 发现要把8个都点亮 每次输入会把输入的数本身和他上一个下一个都改变状态&#xff0c;当…

Jenkin权限控制——基于角色授权策略

开启授权策略 Jenkins的项目权限控制通过【授权策略】实现&#xff0c;【授权策略】需要plugins提供&#xff0c;首先需要安装Role-based Authorization Strategy 安装Role-based Authorization Strategy 管理Jenkins——》插件管理——》搜素——》Role-based Authorizatio…

企微机器人使用及内容配置文档

如何使用群机器人 在终端某个群组添加机器人之后&#xff0c;创建者可以在机器人详情页看的该机器人特有的webhookurl。开发者可以按以下说明a向这个地址发起HTTP POST 请求&#xff0c;即可实现给该群组发送消息。下面举个简单的例子. 假设webhook是&#xff1a;https://qyapi…

【Git 从入门到精通】Git中常用的指令(含使用Git维护一个项目的完整操作)

文章目录一、使用git维护一个项目完整操作1.设置用户名与邮箱2.初始化项目中的Git3.使用Git追踪项目中的文件4.提交一次代码5.后期项目的更新与维护附录、常用命令一览表一、使用git维护一个项目完整操作 1.设置用户名与邮箱 注意:这个设置的并不是将代码提交到github或者gite…

CAD动态块操作实例:绘制剖面符号

CAD动态块与普通的CAD图块相比&#xff0c;其图形夹点更多&#xff0c;设计师可以利用动态块的夹点对图形进行快速调整&#xff0c;自由拉伸长度、随心切换隐藏形态等。本节&#xff0c;给大家分享一下浩辰CAD软件中利用CAD动态块的极轴拉伸功能来绘制剖面符号的具体操作步骤。…

[杂记]算法: 并查集

0. 引言 我们考虑如何计算一个图连通分量的个数. 假定简单无向图GGG有两个连通分量(子图)G1,G2G_1, G_2G1​,G2​, 如下图所示: 一个很自然的想法是, 要想求连通分量个数, 我们可以使用Full-DFS算法, 也就是我们从某个点开始深度优先搜索, 并标记访问过的元素. 随后挨个顶点…