HAProxy 配置 HTTPS 反向代理时 ssl crt 证书路径怎么设置?

文章导读
HAProxy 配置 HTTPS 反向代理时,ssl crt 证书路径需写在 frontend 或 listen 段的 bind 行中,指向一个包含证书和私钥的合并 PEM 文件。此配置适用于 HAProxy 终止 SSL 的场景,若 HAProxy 未编译 OpenSSL 支持则无法生效。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

HAProxy 配置 HTTPS 反向代理时,ssl crt 证书路径需写在 frontendlisten 段的 bind 行中,指向一个包含证书和私钥的合并 PEM 文件。此配置适用于 HAProxy 终止 SSL 的场景,若 HAProxy 未编译 OpenSSL 支持则无法生效。

先说结论:HAProxy 的 ssl crt 参数必须指向合并后的 PEM 文件,且 HAProxy 需支持 SSL 编译。

  • 适合 HAProxy 终结 SSL 场景
  • 先准备 cert 和 key 合并的 pem 文件
  • 验收用 haproxy -c 检查配置

命令速用版

合并证书与私钥到 PEM 文件:

cat www.example.com.crt www.example.com.key > /etc/haproxy/certs/www.example.com.pem

配置文件 bind 行设置:

bind *:443 ssl crt /etc/haproxy/certs/www.example.com.pem

为什么会这样

HAProxy 设计机制要求证书和私钥在同一文件中读取。

与 Nginx 不同,HAProxy 在编译开启 OpenSSL 支持后,要求在 bind 指令中通过 ssl crt 指定单一文件路径。该文件必须同时包含公钥证书和私钥内容,通常格式为 PEM。若分开指定或格式错误,HAProxy 启动时会报错无法加载证书。

分步处理

1. 确认 HAProxy 支持 SSL

执行 haproxy -vvldd haproxy | grep ssl。若输出中包含 libssl 字样,说明已支持 SSL 功能。若不支持,需重新编译并添加 USE_OPENSSL=1 参数。

HAProxy 配置 HTTPS 反向代理时 ssl crt 证书路径怎么设置?

2. 合并证书文件

将 CRT 证书文件和 KEY 私钥文件合并为一个 PEM 文件。命令示例:

cat server.crt server.key > server.pem

3. 修改配置文件

编辑 /etc/haproxy/haproxy.cfg,在 frontendlisten 段添加 bind 配置。示例:

frontend https_frontend
bind *:443 ssl crt /etc/haproxy/certs/server.pem
mode http

4. 检查配置语法

执行 haproxy -c -f /etc/haproxy/haproxy.cfg。若输出 Configuration file is valid,则语法无误。

5. 重启服务

执行 systemctl restart haproxy 使配置生效。

HAProxy 配置 HTTPS 反向代理时 ssl crt 证书路径怎么设置?

怎么验证是否生效

使用 OpenSSL 命令测试连接:

openssl s_client -connect 你的域名:443

若输出中包含 Certificate chain 且无握手错误,说明 SSL 终止成功。也可以在浏览器访问 HTTPS 地址,查看锁形图标及证书详情。

常见坑

1. 文件权限问题

PEM 文件需对 HAProxy 运行用户可读。若权限不足,启动日志会报 unable to load certificate

2. 编译未开启 SSL

若配置了 ssl crt 但 HAProxy 未编译 OpenSSL 支持,启动会直接失败。需确认编译参数包含 USE_OPENSSL=1

3. TCP 模式误用

HAProxy 配置 HTTPS 反向代理时 ssl crt 证书路径怎么设置?

mode 设置为 tcp,HAProxy 仅做四层转发,后端服务器需自行配置 SSL。此时 HAProxy 配置中不应包含 ssl crt 参数,否则可能冲突。

常见问题

证书路径必须是绝对路径吗?

建议使用绝对路径。

虽然相对路径在某些情况下可行,但绝对路径能避免因工作目录变化导致的加载失败,推荐写满完整路径如 /etc/haproxy/certs/site.pem

PEM 文件顺序有要求吗?

通常证书在前,私钥在后。

合并时建议先 cat 证书文件再 cat 私钥文件。部分版本对顺序敏感,保持标准顺序可减少兼容性风险。

HAProxy 不做 SSL 终止怎么配置?

使用 TCP 模式透传。

若后端服务器已配置 HTTPS,HAProxy 只需设置 mode tcpbind *:443 不加 ssl crt,将流量原样转发至后端 443 端口。

参考来源

  • HAProxy 全站 HTTPS 配置与优化指南_haproxy 开启 ssl-CSDN 博客
  • HAProxy 如何配置 SSL
  • haproxy 代理 https 配置方法【转】
  • HAProxy SSL 代理配置指南-CSDN 博客
  • haproxy ssl 证书配置 - 金笛秀才 - 博客园