如何实现SSL终止随着HAProxy的在Ubuntu 14.04

HAProxy的,它代表的高可用性代理,是一个流行的开源软件的TCP / HTTP负载均衡和代理解决方案。 在本教程中,我们将在如何使用HAProxy的为SSL终止,交通加密和负载平衡的Web服务器。我们还将向您展示如何使用HAProxy的对HTTP流量重定向到HTTPS。 本机SSL支持在HAProxy的1.5.x版本,这是释放在2014年6月一个稳定的版本来实现。

介绍

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文件中。

我们的开始环境

这里是我们开始的环境: HTTP上的Web服务器 如果您的环境与示例不同,就像您已在Web服务器上使用SSL或具有单独的数据库服务器一样,您应该能够使本教程适合您的环境。 如果你不熟悉基本的负载均衡概念或术语,如7层负载均衡或后端或访问控制列表,这里是解释的基础知识的文章: 简介HAProxy的和负载平衡概念

我们的目标

在本教程结束时,我们希望有一个如下所示的环境: HAProxy SSL终止 也就是说,您的用户将通过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指南结合,以进一步改善您的环境!