🎬 HoRain 云小助手个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

🔧 配置步骤详解

1. 安装与证书准备

2. 编辑核心配置文件

3. 选择负载均衡算法

4. 启动服务与验证配置

⚠️ 关键注意事项

💡 进阶选项:SSL 穿透

💎 总结


HAProxy 是一款高性能的负载均衡器和代理服务器,用它来终止 HTTPS 流量能有效减轻后端服务器的负担,并实现高效的流量分发。下面这张图清晰地展示了这一过程的核心数据流:

flowchart TD
    A[Web客户端] --> B[发送 HTTPS 请求]
    B --> C[HAProxy Frontend<br>监听 443 端口]
    C --> D{SSL 终止<br>解密流量}
    D --> E[明文 HTTP 请求]
    E --> F[HAProxy Backend<br>负载均衡]
    F --> G[选择后端服务器]
    G --> H[后端服务器群<br>Server1:80<br>Server2:80<br>Server3:80]
    H --> I[处理请求]
    I --> J[返回 HTTP 响应]
    J --> K[HAProxy 重新加密响应]
    K --> L[返回 HTTPS 响应给客户端]
    L --> A

下面我们具体看看如何配置以实现这些功能。

🔧 配置步骤详解

1. 安装与证书准备

首先,确保已安装 HAProxy。在 CentOS 或 Ubuntu 上,可以使用 yum install haproxyapt install haproxy命令。

实现 HTTPS 终止,SSL 证书是必需的。你需要将证书文件(如 .crt)和私钥文件(如 .key)​​合并为一个单独的 .pem文件​​,这是 HAProxy 读取证书的标准方式。可以使用以下命令合并:

cat your_domain.crt your_domain.key > /etc/haproxy/ssl/your_domain.pem

请务必确保该 PEM 文件的权限安全,建议设置为 600(仅 root 可读)。

2. 编辑核心配置文件

HAProxy 的主配置文件通常是 /etc/haproxy/haproxy.cfg。我们需要配置前端(Frontend)来处理入站 HTTPS 连接,并配置后端(Backend)来定义服务器池和负载均衡策略。

一个基础的配置示例如下:

# 全局配置,定义进程级别的参数
global
    daemon
    maxconn 10000  # 限制最大并发连接数

# 默认参数,可被frontend或backend继承
defaults
    mode http
    timeout connect 5s
    timeout client 50s
    timeout server 50s
    option httplog  # 启用详细的HTTP日志记录

# 前端服务配置,监听客户端HTTPS请求
frontend https_front
    bind *:443 ssl crt /etc/haproxy/ssl/your_domain.pem  # 绑定443端口并指定证书
    default_backend web_servers  # 指定默认的后端服务器组
    option forwardfor  # 添加X-Forwarded-For头,传递客户端真实IP
    http-request add-header X-Forwarded-Proto https  # 告知后端协议为HTTPS

# 可选:将HTTP请求重定向到HTTPS
frontend http_redirect
    bind *:80
    http-request redirect scheme https code 301  # 301永久重定向

# 后端服务配置,定义服务器池和负载均衡规则
backend web_servers
    balance roundrobin  # 使用轮询负载均衡算法
    server web1 192.168.1.101:80 check inter 1s  # 定义服务器,并启用健康检查
    server web2 192.168.1.102:80 check inter 1s
    option httpchk GET /health  # 可指定健康检查的端点
3. 选择负载均衡算法

HAProxy 支持多种负载均衡算法,常见的有:

  • roundrobin​:​​轮询​​,将请求依次分发给每个后端服务器。适合负载均匀且后端服务器性能相近的场景。

  • leastconn​:​​最少连接​​,将新请求分发给当前连接数最少的服务器。适合处理长连接或请求处理时间差异较大的情况。

  • source​:​​源 IP 哈希​​,根据客户端 IP 地址的哈希值分配服务器,可保持会话粘滞。适用于需要保持会话但后端服务器未做会话共享的场景。

4. 启动服务与验证配置

配置完成后,先使用 haproxy -c -f /etc/haproxy/haproxy.cfg命令检查配置文件语法是否正确。若无误,则重启 HAProxy 服务以应用新配置:

systemctl restart haproxy

之后,你可以通过浏览器访问你的域名,确认 HTTPS 连接正常,并且通过查看后端服务器的访问日志来验证负载均衡是否生效。

⚠️ 关键注意事项

  • ​会话保持​​:如果您的应用需要保持用户会话状态(例如使用了 Session),需要确保所有后端服务器能共享会话数据(例如通过 Redis 或数据库)。如果无法共享,可以考虑使用 source负载均衡算法将同一用户的请求定向到固定服务器。

  • ​健康检查​​:配置中的 check参数和 option httpchk指令能让 HAProxy 定期检查后端服务器健康状态,自动从池中移除故障服务器,确保服务高可用。

  • ​性能与安全​​:

    • 根据预期并发连接数调整 global段中的 maxconn参数。

    • 考虑在 bind行使用 ssl-min-ver TLSv1.2ciphers参数限制 SSL 协议版本和加密套件,以增强安全性。

    • 如果 HAProxy 需要监听非常见端口,可能需要调整 SELinux 策略,例如设置 setsebool -P haproxy_connect_any on

💡 进阶选项:SSL 穿透

除了 SSL 终止,HAProxy 也支持 ​​SSL 穿透(SSL Passthrough)​​ 模式。在此模式下,加密的 HTTPS 流量会直接透传到后端服务器,由后端服务器进行解密。

  • ​优点​​:后端服务器能获取到最原始的客户端信息,加解密负载完全分散到后端。

  • ​缺点​​:HAProxy 无法解析或修改加密流量,因此无法实现基于 HTTP 头部的高级路由、插入 X-Forwarded-*头等信息,且后端服务器需要各自配置 SSL 证书。

  • ​配置关键​​:需将前端和后端的 mode设置为 tcp而非 http,因为 HAProxy 此时只处理 TCP 流量。

💎 总结

总的来说,使用 HAProxy 进行 HTTPS 终止和负载均衡,核心在于正确准备证书、编写前端和后端配置,并根据实际业务需求选择合适的负载均衡算法和会话管理策略。

希望这份指南能帮助您顺利完成配置。如果您在具体操作中遇到更细致的问题,比如特定算法的选择或高可用架构设计,我们可以继续深入探讨。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

分享最新、最前沿的AI大模型技术,吸纳国内前几批AI大模型开发者

更多推荐