介绍
HAProxy代表高可用性代理,是一种流行的开源软件TCP / HTTP负载均衡器和代理解决方案,可以在Linux,Solaris和FreeBSD上运行。其最常见的用途是通过在多个服务器(例如Web,应用程序,数据库)上分布工作负载来提高服务器环境的性能和可靠性。它用于许多高调的环境,包括:GitHub,Imgur,Instagram和Twitter。 在本教程中,我们将介绍如何使用HAProxy进行SSL终止,流量加密和负载均衡您的Web服务器。我们还将向您展示如何使用HAProxy将HTTP流量重定向到HTTPS。 本地SSL支持已在HAProxy 1.5.x中实现,该版本在2014年6月作为稳定版本发布。
先决条件
要完成本教程,您必须具有或获得以下内容:
- 至少一个Web服务器,具有专用网络,在HTTP上侦听(端口80)
- root访问一个额外的VPS,我们将在其上安装HAProxy。说明设置root访问权限可以在这里找到(第3步和4): 与Ubuntu 14.04初始服务器设置 。
- 具有与您的域名或IP地址匹配的“公用名称”的SSL证书和私钥对
如果您尚未拥有SSL证书和私钥对,请先获取SSL证书和私钥对,然后再继续。下面是一些教程,其中包含创建SSL证书的步骤:
创建组合的PEM SSL证书/密钥文件
要使用HAProxy实现SSL终止,我们必须确保您的SSL证书和密钥对采用正确的格式PEM。 在大多数情况下,您只需将SSL证书(由证书颁发机构提供的.crt或.cer文件)及其相应的私钥(.key文件,由您生成)组合。 假设你的证书文件名为
example.com.crt
,你的私钥文件名为
example.com.key
,这里是如何结合文件的例子:
cat example.com.crt example.com.key > example.com.pem
sudo cp example.com.pem /etc/ssl/private/
这将创建相结合PEM文件,名为
example.com.pem
并将其复制到
/etc/ssl/private
。一如既往,请确保保护您的私钥文件的任何副本,包括PEM文件(其中包含私钥)。 在某些情况下,您可能需要将CA根证书和CA中间证书复制到PEM文件中。
我们的开始环境
这里是我们开始的环境:
如果您的环境与示例不同,就像您已在Web服务器上使用SSL或具有单独的数据库服务器一样,您应该能够使本教程适合您的环境。 如果你不熟悉基本的负载均衡概念或术语,如7层负载均衡或后端或访问控制列表,这里是解释的基础知识的文章:
简介HAProxy的和负载平衡概念 。
我们的目标
在本教程结束时,我们希望有一个如下所示的环境:
也就是说,您的用户将通过HTTPS连接到HAProxy服务器来访问您的网站,这将解密SSL会话,并通过端口80上的专用网络接口将未加密的请求转发到您的Web服务器(即www-backend中的服务器) 。然后,您的Web服务器会将其响应发送到您的HAProxy服务器,这将加密响应并将其发送回做出原始请求的用户。 您可以设置您的
www后端与尽可能多的Web服务器,只要你想,只要他们服务相同的内容。换句话说,您可以使用单个服务器进行设置,然后通过添加任意数量的服务器来扩展它。请记住,随着流量的增加,如果HAProxy服务器没有足够的系统资源来处理用户流量,则可能会成为性能瓶颈。
注:本教程并不讨论如何确保你的Web /应用程序服务器提供相同的内容,因为这往往是应用程序或Web服务器相关。
安装HAProxy 1.6.x
使用专用网络创建新的VPS。在本教程中,我们将它称为
HAProxy的www的 ,但你可以叫它任何你想要的。 在我们
HAProxy的www的 VPS,添加专用PPA到apt-get的:
sudo add-apt-repository ppa:vbernat/haproxy-1.6
然后更新您的apt缓存:
sudo apt-get update
然后使用apt-get使用以下命令安装HAProxy 1.6:
sudo apt-get install haproxy
现在HAProxy 1.6已经安装,让我们配置它!
HAProxy配置
HAProxy的配置文件位于
/etc/haproxy/haproxy.cfg
和被分成两个主要部分:
- 全球 :套工艺范围的参数
- 代理 :由违约 , 听 , 前端和后端部分
同样,如果你不熟悉HAProxy的或碱性的负载均衡概念和术语,请参考以下链接:
到HAProxy的介绍和负载平衡概念 。
HAProxy配置:全局
所有HAProxy的配置应该在你的HAProxy的VPS,HAProxy的www的完成。 在编辑器中打开haproxy.cfg:
sudo vi /etc/haproxy/haproxy.cfg
你会看到,已经有定义的两个部分:
全局和
默认值 。 你会想要做的第一件事被设置为
MAXCONN一个合理的数字。 此设置会影响HAProxy将允许的并发连接数,这可能会影响QoS并阻止Web服务器尝试提供太多请求而导致崩溃。 你需要玩弄它,找到什么适合你的环境。 以下行(你认为是合理的值)添加到配置的
全局部分
maxconn 2048
添加此行,以配置生成的临时DHE密钥的最大大小:
tune.ssl.default-dh-param 2048
接下来,在
默认值部分,添加这行下以下行
mode http
:
option forwardfor
option http-server-close
该
forwardfor选项设置HAProxy的系统上增加X -转发,对于头到每个请求,和
HTTP服务器,关闭选项通过关闭连接,但保持保持活动HAProxy的和您的用户之间减少了等待时间。
HAProxy配置:统计
使用HAProxy统计信息可以有助于确定HAProxy如何处理传入流量。如果你想使HAProxy的统计页面,添加在
默认值部分以下行(与安全值代替用户名和密码):
stats enable
stats uri /stats
stats realm Haproxy\ Statistics
stats auth user:password
这将允许您将您的域名就看HAProxy的统计页面
/stats
(如https://example.com/stats )。 不要关闭配置文件!我们将在下面添加代理配置。
HAProxy配置:代理
前端配置
我们要添加的第一件事是前端来处理传入的HTTP连接。在文件的结尾,让我们添加一个名为
WWW-HTTP前端。 务必更换
haproxy_www_public_IP
与HAProxy的www的VPS的
公网IP:
frontend www-http
bind haproxy_www_public_IP:80
reqadd X-Forwarded-Proto:\ http
default_backend www-backend
以下是前端配置片段中每行代码的解释:
- 前端WWW-HTTP:指定一个名为“WWW-HTTP”前端
- 绑定haproxy_www_public_IP:80:更换
haproxy_www_public_IP
与HAProxy的www的公共IP地址。这告诉HAProxy这个前端将处理此IP地址和端口80(HTTP)上的传入网络流量,
- reqadd的X转发-原:\ HTTP:添加http头结束HTTP请求的结束
- default_backend WWW后端 :指定任何流量,该前端接收将被转发到www后端 ,我们将在接下来的步骤中定义
接下来,我们将添加一个前端来处理传入的HTTPS连接。在文件的结尾,让我们添加一个名为
WWW-HTTPS前端。 务必更换
haproxy_www_public_IP
与HAProxy的www的VPS的
公网IP:
frontend www-https
bind haproxy_www_public_IP:443 ssl crt /etc/ssl/private/example.com.pem
reqadd X-Forwarded-Proto:\ https
default_backend www-backend
- 前端WWW-HTTPS:指定一个名为“WWW-HTTPS”前端
- 绑定haproxy_www_public_IP:443 SSL CRT ...:更换
haproxy_www_public_IP
与HAProxy的www的公共IP地址, example.com.pem
与您的SSL证书,并在合并PEM格式的密钥对。这告诉HAProxy这个前端将处理此IP地址和端口443(HTTPS)上的传入网络流量。
- reqadd的X转发-原:\ HTTPS:添加HTTPS头结束HTTPS请求的结束
- default_backend WWW后端 :指定任何流量,该前端接收将被转发到www后端 ,我们将在接下来的步骤中定义
后端配置
完成前端配置后,通过添加以下行继续添加后端。请务必将突出显示的字词替换为您的网络服务器的相应私有IP地址:
backend www-backend
redirect scheme https if !{ ssl_fc }
server www-1 www_1_private_IP:80 check
server www-2 www_2_private_IP:80 check
以下是后端配置代码段中每行代码的解释:
- 后端WWW后端 :指定后端名为WWW的后端
- 重定向方案HTTPS如果{} ssl_fc:这条线将HTTP请求重定向到HTTPS,这使得你的网站HTTPS只。如果要同时允许HTTP和HTTPS,请删除此行
- 服务器WWW-1,...:指定名为WWW的图1中 ,私有IP(你必须替换)和端口,它正在侦听,80后端服务器。 检查选项使负载平衡器此服务器上定期进行健康检查
- 服务器WWW的2 ...:类似于前述线。添加其他类似的行,使用适当的名称和IP地址向负载均衡器添加更多服务器
现在保存并退出
haproxy.cfg
。 HAProxy现在可以启动,但让我们首先启用日志记录。
启用HAProxy日志记录
在HAProxy中启用日志非常简单。首先编辑rsyslog.conf文件:
sudo vi /etc/rsyslog.conf
然后找到以下两行,并取消注释它们以启用UDP syslog接收。完成后,它应该类似于以下内容:
$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1
现在重新启动rsyslog以启用新配置:
sudo service rsyslog restart
HAProxy日志记录现在已启用!日志文件将在被创建
/var/log/haproxy.log
一旦HAProxy的开始。
启动HAProxy
在HAProxy的www的 ,开始HAProxy的把你的配置更改生效:
sudo service haproxy restart
HAProxy现在正在执行SSL终止和负载平衡您的Web服务器!您的负载均衡服务器现在可以通过负载均衡器的公共IP地址或域名访问您的用户,haproxy-www!有一些事情,你会想检查,以确保一切正常设置。
事情检查
- 如果你还没有准备好,更新您的域名服务器到您的域名指向HAProxy的-WWW服务器的公网IP地址
- 如果您希望您的服务器只使用HTTPS,您需要确保您的Web服务器(例如www-1,www-2等)只在端口80上侦听其专用IP地址。否则,用户将能够通过其公共IP地址上的HTTP(未加密)访问您的Web服务器。
- 通过HTTPS访问HAProxy的www的 ,并确保它的工作原理
- 通过HTTP访问HAProxy的www的 ,并确保其重定向到HTTPS(除非你将其配置为允许HTTP和HTTPS)
注:如果您使用的是需要知道自己的网址的应用程序,像WordPress,你需要从“HTTP”到https“更改URL设置遵循WordPress的例子,你会去你的WordPress常规设置。然后将WordPress地址(URL)和站点地址(URL)从“http”更改为“https”。
结论
现在,您有一个负载均衡器解决方案,可以处理您的SSL连接,并可用于横向扩展您的服务器环境。随意将您在本指南中学到的内容与其他HAProxy指南结合,以进一步改善您的环境!