在Debian 9.1 (Stretch)上,安装HAProxy 1.7

・6 分钟阅读

使用不同的系统?

HAProxy是一个网络软件应用程序,提供高可用性,负载平衡,以及用于TCP和HTTP网络应用程序的代理,它适用于高流量网站,并为许多热门网站提供支持。本文将向你展示如何在Debian 9.1上安装和配置HAProxy 。

尽管HAProxy有好几个突出的特性,本文重点介绍如何将HAProxy设置为"代理"应用程序。

要求

  • 至少有两个服务器(用于负载均衡)与你的网站或Web应用程序一起部署。

安装HAProxy

Debian 9已经附带HAProxy 1.7 (撰写本文时,最新稳定发行版),我们只需使用apt-get安装它:


# apt-get update
# apt-get install haproxy

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

配置HAProxy

HAProxy配置文件分为两部分 "global" 和"proxies" ,

Global

使用你喜爱的文本编辑器,打开/etc/haproxy/haproxy.cfg,并且注意预定义的部分: "global "还有"defaults ",首先要做的是,将maxconn增加到合理的大小,因为这会影响HAProxy允许的连接,太多的连接可能导致你的web服务因太多的请求而崩溃,你需要调整大小才能找到适合你,在global中,我们选择了3072的maxconn值。


global
 daemon
 maxconn 3072

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

 
option forwardfor

 

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

此外,在服务器端添加此行以启用HTTP连接关闭模式,同时保持在客户端保持HTTP的能力,这样可以减少客户端的延迟,并有助于节省服务器资源:


option http-server-close

如果你希望在客户端和服务器端同时使用keep,那么你可以使用option http-keep-alive ,当与服务器建立新连接的成本显著比检索请求资源的成本大时,这个选项特别有用。

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


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

Proxies

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

前端配置

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


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

请务必用服务器IP地址或域名的公共名称替换public_ip

后端配置

通过在配置文件的末尾添加以下行来设置你的后端:


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

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

保存配置文件,然后重新启动HAProxy :


service haproxy restart

如果一切正常,那么你就可以连接到http://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指定端口号。

杨和超 profile image