在 Debian 9.1 (Stretch) 上安装 HAProxy 1.7

HAProxy 是一种网络软件应用程序,可为 TCP 和 HTTP 网络应用程序提供高可用性、负载平衡和代理。 它适用于高流量网站,并为网络上的许多流行网站提供支持。 本文将向您展示怎样在 Debian 9.1 上安装和配置 HAProxy。

尽管 HAProxy 有几个突出的特性,但本文重点介绍怎样设置 HAProxy 来“代理”您的 Web 应用程序。

要求

  • 至少有两个 Vultr 服务器(用于负载平衡功能),并将您的网站或 Web 应用程序部署到它们。

安装 HAProxy

Debian 9 已经附带了 HAProxy 1.7(撰写本文时最新的稳定版本),我们可以简单地使用安装它 apt-get

# apt-get update
# apt-get install haproxy

如果前面的命令成功,那么您已经安装了HAProxy,您可以继续下一步。

配置 HAProxy

HAProxy 配置文件分为两部分——“全局”和“代理”。 一个处理进程范围的配置,而后者由默认配置、前端和后端部分组成。

全局部分

使用您最喜欢的文本编辑器,打开 /etc/haproxy/haproxy.cfg 并注意预定义的部分:“global”和“defaults”。 您可能想要做的第一件事是增加 maxconn 到合理的大小,因为这会影响 HAProxy 允许的连接。 由于请求过多,连接过多可能会导致您的 Web 服务崩溃。 您将需要调整大小以查看适合您的内容。 在全局部分,我们选择了一个 maxconn 的价值 3072.

global
    daemon
    maxconn 3072

在默认部分,在模式下添加以下行 http

option forwardfor

这将添加 X-Forwarded-For 每个请求的标头,这允许您的后端服务器了解用户的原始 IP 地址。

此外,添加此行以启用 HTTP 连接-close 服务器端的模式,同时保持在客户端支持 HTTP keep-alive 的能力。 这减少了客户端的延迟并有助于节省服务器资源:

option http-server-close

如果您希望在客户端和服务器端都使用 keep-alive,那么您可以使用 option http-keep-alive 反而。 当与检索请求资源的成本相比,与服务器建立新连接的成本显着时,此选项特别有用。

最后,生成的配置文件将如下所示:

defaults
    mode http
    option forwardfor
    option http-server-close
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

代理部分

要设置代理,您需要在配置文件中添加两个部分来定义代理的两个部分:前端和后端。

前端配置

前端将处理您的 HTTP 连接。 将以下内容添加到您的末尾 haproxy.cfg 文件:

frontend http-frontend
    bind public_ip:80
    reqadd X-Forwarded-Proto: http
    default_backend wwwbackend

务必更换 public_ip 使用您服务器的公共 IP 地址或域名。

后端配置

通过将以下几行添加到配置文件的末尾来设置您的后端:

backend wwwbackend
    server 1-www server1_ip:80 check
    server 2-www server2_ip:80 check
    server 3-www server3_ip:80 check

这里使用的后端配置创建了 3 个名为的连接 X-www. (X 是 1、2 或 3。)它们中的每一个都对应一个 serverX_ip:80 地址。 (代替 serverX_ip 与您的 Vultr 实例的 IP 地址。)这将允许您在指定服务器集中的每个服务器之间进行负载平衡(假设每个 IP 地址对应于不同的服务器)。 这 check 选项使负载平衡器在服务器上执行健康检查。

Save 配置文件,然后重启HAProxy:

service haproxy restart

如果一切正常,那么您将能够连接到 https://public_ip/ (将其替换为您在前端步骤中配置的公共 IP 或域名)并查看您的网站。

调试错误

如果您的 HAProxy 实例在您修改后拒绝启动,很可能是您在配置文件的某处有错误。 要在配置文件中获得有关问题的明确消息,您可以尝试使用以下命令手动启动 HAProxy:

# haproxy -f /etc/haproxy/haproxy.cfg

例如,如果您看到这样的输出:

[ALERT] 234/195612 (2561) : parsing [/etc/haproxy/haproxy.cfg:48] : server 1-www has neither service port nor check port nor tcp_check rule 'connect' with port information. Check has been disabled.
[ALERT] 234/195612 (2561) : Error(s) found in configuration file : /etc/haproxy/haproxy.cfg
[ALERT] 234/195612 (2561) : Fatal errors found in configuration.

然后,您忘记指定服务器的端口号 1-www.

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com