Appearance
在 HAProxy 中首次部署 SSL 证书并启用 HTTPS
本文适用于已有正常 HTTP 网站、证书已签发,需要首次启用 HTTPS 的 Linux / HAProxy 客户。以 trustasia.com 为例,请将域名和路径替换为实际信息。已有正常 HTTPS 的网站无需重新执行;需要自动换证时,核对本文完成条件后阅读自动更新教程。
操作流程: 准备环境 → KeyManager 导出 → 合并安装证书 → 配置 HTTPS → 验证访问。
第一步:确认目标与环境
- 在服务器终端操作,使用有 sudo 权限的账号;网站当前能通过 HTTP 访问,
sudo haproxy -c -f /etc/haproxy/haproxy.cfg检查通过。 - 找到 HAProxy 配置文件(默认
/etc/haproxy/haproxy.cfg),先保存一份副本,后面只修改目标网站对应的配置。 - 已签发该域名的证书,能通过 KeyManager 导出证书和私钥。
- 域名指向实际网站入口,客户端能访问 HTTPS 的 443 端口。使用 WAF、CDN 等代理时,还要在代理入口配置证书。
先完成 HTTPS 访问,自动更新和 HTTP 跳转留到成功后再配置。
第二步:导出并安装证书
在 CertCloud 的已签发订单中点击“下载证书 → 打开 KeyManager”,同步到保存了匹配私钥的 KeyManager 环境。在“证书管理 → 更多 → 导出证书”选择 Nginx(PEM) 格式,取得完整证书链和私钥,再上传到 HAProxy 服务器。操作图示见KeyManager 下载与导出指南,本篇不需要安装自动化工具。
本文将导出的证书链和私钥合并为一个 PEM 文件,供 HAProxy 读取。在 HAProxy 服务器终端中修改下面三个变量,再整段执行。目标已有同名文件时先保存副本,命令会覆盖它。
bash
sudo bash -c 'set -eu
SOURCE_CERT="/root/cert-files/fullchain.pem"
SOURCE_KEY="/root/cert-files/privkey.pem"
TARGET_PEM="/etc/haproxy/certs/trustasia.com.pem"
install -d -m 700 -o root -g root "$(dirname -- "$TARGET_PEM")"
umask 077
cat "$SOURCE_CERT" > "$TARGET_PEM"
printf "\n" >> "$TARGET_PEM"
cat "$SOURCE_KEY" >> "$TARGET_PEM"
chown root:root "$TARGET_PEM"
chmod 600 "$TARGET_PEM"
echo "证书和私钥已合并安装到:$TARGET_PEM"'SOURCE_CERT:上传到服务器的完整证书链文件路径,文件名按实际导出结果填写。SOURCE_KEY:同一次导出的私钥文件路径。TARGET_PEM:合并后的 PEM 文件路径,第三步的crt填写相同路径。
看到“证书和私钥已合并安装到……”后,继续配置 HTTPS。本文使用由 root 启动的 HAProxy,合并文件包含私钥,仅允许 root 读写。
第三步:为原网站添加 HTTPS
打开第一步找到的配置文件(默认 /etc/haproxy/haproxy.cfg),找到网站现有的 frontend 配置段,其中通常有 bind :80 这一行。在原 HTTP bind 下方、同一个 frontend 内,新增 HTTPS bind 行。例如,添加后的配置如下:
haproxy
frontend web_front
bind :80
# 新增:HTTPS 监听
bind :443 ssl crt /etc/haproxy/certs/trustasia.com.pem
mode http
default_backend web_backendweb_front 和 web_backend 是示例名称,沿用原配置中的名称。只添加标注“新增”的 HTTPS 行,crt 后面的路径换成第二步的 TARGET_PEM;原有的 acl、use_backend、default_backend 以及对应的 backend 配置继续保留。
保留原 HTTP 监听、backend 后端路由、访问控制及其他业务设置,确认 443 端口没有冲突。保存后执行以下命令,检查通过才重新加载服务。本文使用默认配置文件和 haproxy 服务,实际不同时替换为对应值:
bash
sudo haproxy -c -f /etc/haproxy/haproxy.cfg && sudo systemctl reload haproxy配置检查失败时,按提示修正本次变更后重新执行。命令没有报错后,继续第四步。
第四步:检查网站访问
在自己的电脑上打开浏览器,访问 https://trustasia.com/。把 trustasia.com 换成证书对应的网站域名;第三步端口不是 443 时加上实际端口,例如 https://trustasia.com:8443/。
确认以下结果:
- 打开的是自己的网站,浏览器没有“连接不安全”或证书错误提示。
- 点击地址栏左侧的网站信息按钮,进入连接信息并查看证书,确认域名是自己的网站、证书没有过期。
- 浏览常用页面,确认图片、样式和登录等功能正常。
以上均正常,就完成了 HTTPS 部署。
如果本次修改后网站无法正常访问: 用第一步保存的副本恢复原配置,再在服务器终端执行第三步的检查和重载命令,确认原来的 HTTP 网站恢复。
如果网站能打开,但浏览器仍显示旧证书,再查看旧证书排查指南。使用 CDN 等代理时,浏览器可能显示代理服务的证书,可按该指南核对 HAProxy 上的证书。
后续自动更新
记录网站域名、HTTPS 端口、合并 PEM 的完整路径及配置副本。需要自动更新时,继续阅读HAProxy 自动更新指南,沿用这些路径和业务配置。
