如何在 Ubuntu 14.04 上使用 HAProxy 实现 SSL 终止

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介

HAProxy,全称高可用代理,是一款流行的开源软件 TCP/HTTP 负载均衡器和代理解决方案,可在 Linux、Solaris 和 FreeBSD 上运行。它最常见的用途是通过将工作负载分布到多台服务器(例如 Web、应用、数据库)上来提高服务器环境的性能和可靠性。它被广泛应用于许多知名环境,包括 GitHub、Imgur、Instagram 和 Twitter。

在本教程中,我们将介绍如何使用 HAProxy 进行 SSL 终止,进行流量加密以及负载均衡您的 Web 服务器。我们还将向您展示如何使用 HAProxy 将 HTTP 流量重定向到 HTTPS。

HAProxy 1.5.x 中实现了原生的 SSL 支持,该版本于 2014 年 6 月发布为稳定版本。

先决条件

要完成本教程,您必须具备或获取以下内容:

  • 至少一台 Web 服务器,具有私有网络,监听 HTTP(端口 80)
  • 在另一个 VPS 上具有 root 访问权限,我们将在其中安装 HAProxy。设置 root 访问权限的说明可以在此处找到(步骤 3 和 4):使用 Ubuntu 14.04 进行初始服务器设置。
  • 具有与您的域名或 IP 地址匹配的“通用名称”的 SSL 证书和私钥对

如果您还没有 SSL 证书和私钥对,请在继续之前获取。以下是一些包含创建 SSL 证书步骤的教程:

  • 创建 StartSSL 证书(private.keyssl.crt
  • 在 Ubuntu 14.04 上创建自签名 SSL 证书(第 2 步–apache.keyapache.crt

创建组合的 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/

这将创建名为 example.com.pem 的组合 PEM 文件,并将其复制到 /etc/ssl/private。请务必确保保护您的私钥文件的任何副本,包括 PEM 文件(其中包含私钥)。

在某些情况下,您可能需要将您的 CA 根证书和 CA 中间证书复制到您的 PEM 文件中。

我们的起始环境

以下是我们要开始的环境:

!Web 服务器上的 HTTP

如果您的环境与示例不同,例如如果您已经在 Web 服务器上使用 SSL,或者您有一个单独的数据库服务器,您应该能够调整本教程以适应您的环境。

如果您对基本的负载均衡概念或术语不熟悉,例如第 7 层负载均衡、后端或 ACL,这里有一篇解释基础知识的文章:HAProxy 和负载均衡概念简介。

我们的目标

在本教程结束时,我们希望拥有以下环境:

!HAProxy SSL 终止

也就是说,您的用户将通过 HTTPS 连接到您的 HAProxy 服务器访问您的网站,该服务器将解密 SSL 会话并将未加密的请求转发到您的 Web 服务器(即 www-backend 中的服务器)通过它们的私有网络接口上的端口 80。然后,您的 Web 服务器将向 HAProxy 服务器发送其响应,后者将加密响应并将其发送回发起原始请求的用户。

您可以根据需要设置 www-backend,使用尽可能多的 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

然后使用以下命令安装 HAProxy 1.6:

sudo apt-get install haproxy

现在 HAProxy 1.6 已安装,让我们来配置它!

HAProxy 配置

HAProxy 的配置文件位于 /etc/haproxy/haproxy.cfg,分为两个主要部分:

  • 全局(Global):设置全局参数
  • 代理(Proxies):包括 defaultslistenfrontendbackend 部分

如果您对 HAProxy 或基本的负载均衡概念和术语不熟悉,请参考以下链接:HAProxy 和负载均衡概念简介

HAProxy 配置:全局(Global)

所有 HAProxy 配置都应在您的 HAProxy VPS 上进行,即 haproxy-www

在编辑器中打开 haproxy.cfg:

sudo vi /etc/haproxy/haproxy.cfg

您会看到已经定义了两个部分:globaldefaults

首先,您需要设置 maxconn 为一个合理的数字。此设置会影响 HAProxy 允许的并发连接数,这可能会影响 QoS 并防止您的 Web 服务器因尝试服务过多请求而崩溃。您需要根据您的环境进行调整。在配置的 global 部分中添加以下行(使用您认为合理的值):

   maxconn 2048

添加以下行,以配置生成的临时 DHE 密钥的最大大小:

   tune.ssl.default-dh-param 2048

接下来,在 defaults 部分,在标有 mode http 的行下添加以下行:

   option forwardforoption http-server-close

forwardfor 选项设置 HAProxy 在每个请求中添加 X-Forwarded-For 头,http-server-close 选项通过关闭连接但保持 keep-alive 来减少 HAProxy 与用户之间的延迟。

HAProxy 配置:统计信息

使用 HAProxy 统计信息可以帮助确定 HAProxy 如何处理传入流量。如果您想要启用 HAProxy 统计页面,在 defaults 部分添加以下行(用安全值替换用户和密码):

   stats enablestats uri /statsstats realm Haproxy\ Statisticsstats auth user:password

这将允许您通过在您的域名后加上 /stats(例如 https://example.com/stats)来查看 HAProxy 统计页面。

不要关闭配置文件!接下来我们将添加代理配置。

HAProxy 配置:代理

前端配置

首先,我们要添加一个前端来处理传入的 HTTP 连接。在文件末尾,让我们添加一个名为 www-http 的前端。确保用您的 haproxy-www VPS 的公共 IP替换 haproxy_www_public_IP

frontend www-httpbind haproxy_www_public_IP:80reqadd X-Forwarded-Proto:\ httpdefault_backend www-backend

以下是上述前端配置片段中每行的解释:

  • frontend www-http:指定名为 “www-http” 的前端
  • bind haproxy_www_public_IP:80:用 haproxy-www 的公共 IP 地址替换 haproxy_www_public_IP。这告诉 HAProxy 此前端将处理此 IP 地址和端口 80(HTTP)上的传入网络流量
  • reqadd X-Forwarded-Proto:\ http:在 HTTP 请求末尾添加 http 头
  • default_backend www-backend:指定此前端接收到的任何流量将被转发到 www-backend,我们将在下一步中定义

接下来,我们将添加一个前端来处理传入的 HTTPS 连接。在文件末尾,让我们添加一个名为 www-https 的前端。确保用您的 haproxy-www VPS 的公共 IP替换 haproxy_www_public_IP

frontend www-httpsbind haproxy_www_public_IP:443 ssl crt /etc/ssl/private/example.com.pemreqadd X-Forwarded-Proto:\ httpsdefault_backend www-backend
  • frontend www-https:指定名为 “www-https” 的前端
  • bind haproxy_www_public_IP:443 ssl crt …:用 haproxy-www 的公共 IP 地址替换 haproxy_www_public_IP,用 pem 格式的 SSL 证书和密钥对中的 example.com.pem 替换。这告诉 HAProxy 此前端将处理此 IP 地址和端口 443(HTTPS)上的传入网络流量
  • reqadd X-Forwarded-Proto:\ https:在 HTTPS 请求末尾添加 https 头
  • default_backend www-backend:指定此前端接收到的任何流量将被转发到 www-backend,我们将在下一步中定义

后端配置

在配置前端完成后,继续通过添加以下行来添加后端。确保用你的 Web 服务器的私有 IP 地址替换下面的高亮词语:

backend www-backendredirect scheme https if !{ ssl_fc }server www-1 www_1_private_IP:80 checkserver www-2 www_2_private_IP:80 check

以下是上述后端配置片段中每行的解释:

  • backend www-backend:指定一个名为 www-backend 的后端
  • redirect scheme https if !{ ssl_fc }:此行将 HTTP 请求重定向到 HTTPS,使您的站点仅支持 HTTPS。如果要允许 HTTP 和 HTTPS,删除此行
  • server www-1 …:指定名为 www-1 的后端服务器,私有 IP(您必须替换)和它正在监听的端口 80check 选项使负载均衡器定期对此服务器执行健康检查
  • server 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 日志记录现在已启用!一旦启动 HAProxy,日志文件将在 /var/log/haproxy.log 中创建。

启动 HAProxy

在 haproxy-www 上,启动 HAProxy 以使配置更改生效:

sudo service haproxy restart

HAProxy 现在正在执行 SSL 终止和负载均衡您的 Web 服务器!您的负载平衡服务器现在可以通过负载均衡器 haproxy-www 的公共 IP 地址或域名访问。有一些事情您需要检查,以确保一切设置正确。

检查事项

  • 如果尚未这样做,请更新您的域名服务器,将您的域指向 haproxy-www 服务器的公共 IP 地址
  • 如果您希望服务器仅使用 HTTPS,您需要确保您的 Web 服务器(例如 www-1、www-2 等)仅在它们的私有 IP 地址上监听端口 80。否则,用户将能够通过它们的公共 IP 地址在 HTTP(未加密)上访问您的 Web 服务器
  • 通过 HTTPS 访问 haproxy-www 并确保它正常工作
  • 通过 HTTP 访问 haproxy-www 并确保它重定向到 HTTPS(除非您配置为允许 HTTP 和 HTTPS)

注意: 如果您使用需要知道自己 URL 的应用程序,比如 WordPress,您需要将 URL 设置从 “http” 更改为 “https”。以 WordPress 为例,您需要转到 WordPress 的常规设置,然后将 WordPress 地址(URL)和站点地址(URL)从 “http” 更改为 “https”。

结论

现在您拥有一个处理 SSL 连接并可用于水平扩展服务器环境的负载均衡器解决方案。请随意将本指南中学到的内容与其他 HAProxy 指南结合使用,以进一步改进您的环境!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/857587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.6.22 刷题总结

2024.6.22 **每日一题** 2663.字典序最小的美丽字符串,该题考察了回文串的性质,一个回文串去掉首尾字母后,仍然是回文串,可以根据这一性质得到如果没有长度为m-2的回文串,那么就不会有长度为m的回文串.由答案取的是最小…

OpenXlab应用部署踩坑记录

参考博客: OpenXlab应用部署经验_xlabdemo-web-CSDN博客 书生浦语大模型实战营Day04OpenXLab 部署_openxlab.org.cn上传模型-CSDN博客 应用创建流程 | OpenXLab浦源 - 文档中心 1、已经在OpenXlab上上传好了模型 在上传好的模型查看一下如何使用模型 2、github…

colmap无GUI编译

cmake … -GNinja -DGUI_ENABLEDFalse

基于肤色模型的人脸识别,基于野火FPGA ZYNQ开发板

使用芯片为ZYNQ—7020,基于野火FPGA ZYNQ开发板 肤色模型简介 YCrCb也称为YUV,主要用于优化彩色视频信号的传输。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。其…

pytets测试框架中如果需要运行多个测试套件时pytest.ini文件设置

pytets测试框架中如果需要运行多个测试套件时pytest.ini文件设置方法 testpaths testcases/fenmi testcases/weixin testcases/Zgen

Java 和 Go 中的 byte 和 String 转换

背景 在讨论 Java 和 Go 中的 byte 和 String 之间的转换时,需要理解它们对字符串和字节数组的不同处理方式,尤其是对于编码和解码的策略。让我们深入探讨 Java 和 Go 在处理这些转换时的设计和实现。 Java 中的 byte[] 和 String 转换: Ja…

MQTTfx连接阿里云(详细版)

1、介绍 作为物联网开放平台,阿里云可谓是吸引大多数嵌入式爱好者的平台。物联网MQTT协议火热的今天,你使用过阿里云吗?本篇文章带你接触阿里云,实现MQTT通信。 我们在测试MQTT之前先了解下什么是MQTT协议。大家都知道它是一种发…

STM32之二:时钟树

目录 1. 时钟 2. STM3时钟源(哪些可以作为时钟信号) 2.1 HSE时钟 2.1.1 高速外部时钟信号(HSE)来源 2.1.2 HSE外部晶体电路配置 2.2 HSI时钟 2.3 PLL时钟 2.4 LSE时钟 2.5 LSI时钟 3. STM32时钟(哪些系统使用时…

css-Echarts图表柱状图,X轴横坐标值显示不完全问题

1.问题 在Echarts图表中当横坐标数值过多,或者数值过长时会导致部分横坐标不显示。数据量少或简单会默认显示完全,当放大时会导致部分横坐标隐藏。 更改第一个Mon字段名 会发现偶数横坐标显示隐藏; 2.解决方法 2.1 在x横坐标中添加interval…

Autosar Dcm配置-0x23服务ReadMemoryByAddress-基于ETAS软件

文章目录 前言Dcm配置DcmDsdDcmDspDcmDspMemoryIdInfo 代码分析总结 前言 一般在调教开发阶段,会使用XCP进行观测和标定,本质上也是操作指定的内存地址。量产后,一般XCP会取消。本文介绍的UDS ReadMemoryByAddress服务,也是读取内…

关于jupyter notebook的使用经验

jupyter notebook 第一点,调整每次打开jupyter notebook的时候的位置第二点,如何设置jupyter notebook可以使用本地anaconda创建的虚拟环境呢?第三点,使用jupyter notebook的技巧 以下三点都是独立的,可以根据自己的需…

SHA256 安全散列算法加速器实验

1、SHA256 介绍 SHA256 加速器是用来计算 SHA-256 的计算单元, SHA256 是 SHA-2 下细分出的一种算法。 SHA-2 名称来自于安全散列算法 2 (英语: Secure Hash Algorithm 2 )的缩写,一种密码散列函 数算法标准…

zdppy_docserver结合zdpvue_client开发前后端分离的文档管理系统

创建前端应用 pnpm create vite安装依赖 pnpm add onlyoffice/document-editor-vue基本使用 这里有三个非常关键的URL地址: 文档服务地址:http://192.168.101.5:8080文档地址:http://192.168.101.5:18889/test.docx回调地址:h…

AI与音乐:创新之光还是毁灭之剑?

AI与音乐:创新之光还是毁灭之剑? 在数字时代的浪潮中,人工智能(AI)技术正以前所未有的速度渗透到音乐领域,引发了广泛的讨论和争议。本文将探讨AI与音乐之间的关系,分析它是否带来了音乐创新的…

用Rancher2.8.5部署K8s集群

参考:通过Rancher 2.7.5部署企业生产级K8s集群 新K8s集群的环境信息 Rancher1台,K8s集群6台(1台rancher,3台master,4台node)。 Name|lmage Name|IP Address|Flavor|Comment project-root-dev-rancher|Ro…

Stable Diffusion 3 如何下载安装使用及性能优化

Stable Diffusion 3 Stable Diffusion 3(SD3),Stability AI最新推出的Stable Diffusion模型系列,现在可以在Hugging Face Hub上使用,并且可以与Diffusers一起使用。 今天发布的模型是Stable Diffusion 3 Medium&…

万字详解ANSI SQL语法及其扩展

ANSI SQL 与扩展SQL详解 一、ANSI SQL语法 ANSI SQL(American National Standards Institute Structured Query Language),即美国国家标准学会结构化查询语言,是一种标准化的数据库查询语言。它用于管理和操作关系数据库中的数据…

【数学】Leetcode 66. 加一【简单】

加一 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入:…

在Krpano中点击热点放大图片并交互

在全景项目中,经常会遇到这样的功能:点击场景中的某个热点,能够进行图片放大,同时还可以对图片进行交互操作,比如放大图片、拖动图片等,本章节内容讲述如何在Krpano库中调用js代码实现图片的放大和交互。具…

MySQL入门学习-连接查询.RIGHT JOIN

Rights Join 是 MySQL 中的一种连接查询类型,用于根据右表中的匹配条件,将左表中的数据与右表中的数据进行连接。 一、与其他连接查询相比,Rights Join 具有以下特点: 1. 连接方向: Rights Join 以右表为主表&#x…