在本文中,我们将在 CentOS 上将 HAProxy 设置为 Nginx 的负载均衡器。 我们假设您已经设置并运行了 NGINX 服务。
目录
- 什么是负载均衡?
- 什么是 HAProxy?
- 如何在 CentOS 上安装 HAProxy?
- 配置 HAProxy 之前要了解的要点
- 如何配置 HAProxy?
- 如何在 CentOS 上启动 HAProxy?
- 结论
什么是负载均衡?
负载均衡器位于客户端和服务器之间,并在多个服务器之间分配网络流量。 它的唯一目的是将传入的请求分发给能够满足请求的服务器。 这是一个没有负载平衡的流程图。
负载均衡器位于客户端和服务器之间,如下图所示。
什么是 HAProxy?
HAProxy 是一个免费、快速、流行且开源的高可用性服务器负载平衡器和代理解决方案,适用于基于 TCP 和 HTTP 的应用程序。 它是用 C 语言编写的,是使用最广泛的负载均衡器。 它被 Github、Stackoverflow、Imgur 等顶级网站使用。
如何在 CentOS 上安装 HAProxy?
要在 CentOS 上安装 HAProxy,您可以使用 yum 包管理器,如下所述。
在我们继续之前,请通过执行以下命令确保您的 yum 索引是最新的:
sudo yum update
之后,我们现在可以使用 yum 包管理器安装 HAProxy,执行:
sudo yum install haproxy
安装完成后,我们可以继续配置 HAProxy。

配置 HAProxy 之前要了解的要点
在本节中,我们将了解 HAProxy 的一些基础知识。
HAProxy 支持哪些模式?
HAProxy 支持 TCP 和 HTTP 两种模式。 TCP 模式称为第四层代理,HTTP 模式称为第七层代理。 两种模式各有利弊。 TCP 模型是默认模式。
TCP 模式更轻更快,因为它的唯一目的是传输数据,而不必读取数据。 对于非 HTTP 服务来说,这是一个更好的选择。
HTTP 模式可以在读取介于两者之间的数据、更好的健康检查和速率限制请求时更改 HTTP 消息。 对于使用 HTTP 协议的应用程序来说,这是一个更好的选择。
HAProxy 支持哪些负载均衡机制?
HAProxy 有很多负载均衡算法。 根据官方文档,大约有十种这样的算法。 但在本教程中,我们将使用循环算法演示 HAProxy。 排名前三的算法如下:
- 循环赛 – 在该算法中,HAProxy 从其中一台服务器开始,依次选择每台服务器。
- 最小连接 – 在这种情况下,它只是选择连接数最少的服务器。
- 来源 – 在此,它根据连接的来源(客户端)选择服务器。
其他的是URI、hdr、first…
HAProxy 中的 ACL 是什么?
ACL 或访问控制列表是可以使用逻辑运算符(AND、OR、NOT)进行操作的条件。 为了 example如果你想拒绝任何人导航到 /wp-admin/ 在您从静态 IP 地址访问之外的 WordPress 网站上,您可以使用访问控制列表。
如何配置 HAProxy?
为了演示如何配置 HAProxy,我们设置了一个包含三个 NGINX 实例的测试环境,这些实例托管在同一台服务器上,但位于不同的端口和不同的网页上。 我们在 CentOS 服务器上安装了 HAProxy,并使用循环机制将其配置为这些 NGINX 实例的负载均衡器。 我们还将设置一个 ACL 来拒绝任何请求 /admin/ 来自用户。

HAProxy的 example 配置文件可以在 /etc/haproxy 命名为 haproxy.cfg. 执行以下命令进入目录:
cd /etc/haproxy

但在本教程中,我们将在下面使用一个简单的 HAProxy 配置:
frontend httpd bind *:80 timeout client 30s mode http http-request deny if { path -i -m beg /admin/ } !{ src 192.168.0.149 } default_backend httpd-servers backend httpd-servers timeout connect 5s timeout server 20s balance roundrobin mode http server httpd1000 192.168.0.191:1000 server httpd2000 192.168.0.191:2000 server httpd3000 192.168.0.191:3000
前端部分配置说明:
这 frontend http
在第一行讲述了应用程序部分,我们将其命名为 httpd
在这里,但您可以将其命名为任何您想要的名称。
这 bind
在第 2 行中说明要绑定的 IP 和端口。
这 timeout client 30s
在第 3 行中,讲述了与客户端的连接应该终止多少秒,这里是 30 秒。
这 mode http
在第 4 行确定它使用 http
模式,您可以通过替换将其更改为 TCP http
和 tcp
.
这 http-request deny if { path -i -m beg /admin/ } !{ src 192.168.0.149 }
第 5 行是一个 ACL,它拒绝在 /admin/ 用户来自以外的路径 192.168.0.149.
这 default_backend httpd-servers
在第 6 行中告诉该前端默认使用哪个后端。
现在我们转到服务器的配置部分:
这 backend httpd-servers
第 8 行定义了位于 HAProxy 后面的配置的服务器部分。
这 timeout connect 5s
在第 9 行中确定 HAProxy 在跳转到另一台服务器之前应该尝试连接到服务器的秒数。
这 timeout server 20s
第 10 行决定了 HAProxy 在跳转到另一台服务器之前应该等待服务器响应输入的时间间隔。
这 balance roundrobin
第 11 行定义了要使用的负载平衡机制。 我们在这里使用循环。
这 mode http
在第 12 行确定它使用 http
模式应与前端模式匹配。
然后服务器以格式列出 server serverName ip:port
每行每台服务器。
如何在 CentOS 上启动 HAProxy?
完成配置后,我们现在可以继续启动它。 在此之前,通过执行以下命令允许防火墙中的端口 80:
sudo firewall-cmd --zone=public --permanent --add-service=http
您可以通过执行以下命令来测试 HAProxy 配置:
sudo haproxy -f /path/to/configuration
这应该会在您的系统上启动 HAProxy。 要在每次系统重新启动时启动 HAProxy,请使用 系统控制 启动它。 配置在 /etc/haproxy/haproxy.cfg 将会被使用。
要启动启用 SELinux 的 HAProxy,请执行:
sudo setsebool -P haproxy_connect_any 1
或者,您可以通过执行以下命令暂时禁用 SELinux:
sudo setenforce 0
然后使用以下 系统控制 启用和启动服务的命令:
sudo systemctl enable haproxy sudo systemctl start haproxy
现在每次重新启动时,HAProxy 都会自行启动。
如果我们在浏览器中打开 192.168.0.195,每次重新加载时,我们都可以看到循环运行。



现在让我们测试我们在配置中设置的 ACL /admin/.
我是用户(即 192.168.0.149),当我导航到 192.168.0.195/admin/,我可以轻松访问它

并且,当尝试与任何其他用户访问相同的目的地时。

这就是 ACL 在 HAProxy 中的工作方式!
结论
在 CentOS 上安装 HAProxy 非常简单,但配置部分可能有点棘手,我们试图涵盖本文中的所有基础知识,以帮助您在系统上设置一个简单的 HAProxy 负载均衡器。
感谢您的阅读! ?