apache的mod_proxy_balancer本身不处理https加密,需启用sslproxyengine并配置sslproxycacertificatefile等指令,使apache以https客户端身份安全连接后端;未启用sslproxyengine会导致502错误。
apache 的 mod_proxy_balancer 本身不处理 https 加密传输,它只负责请求分发逻辑;真正决定是否走 https、如何校验证书、是否透传客户端证书的,是 mod_ssl 提供的 sslproxyengine 及相关指令。所以“为负载均衡集群启用 https 传输”,本质是:在代理转发路径中,让 apache 以 https 客户端身份连接每个后端成员,并正确处理 tls 层。
必须开启 SSLProxyEngine
当 balancer:// 集群里的 BalancerMember 地址是 https:// 开头时(例如 https://backend1:8443),Apache 默认拒绝建立 TLS 连接——除非显式启用:
-
SSLProxyEngine on必须放在<virtualhost></virtualhost>或全局配置中,且作用域需覆盖到代理指令所在位置 - 只写
SSLEngine on(用于对外 HTTPS)完全无效,两者功能无关 - 不开此指令却配了 HTTPS 后端,日志会报
SSL Proxy requested but SSLProxyEngine is not enabled,返回 502 错误
后端证书信任配置
如果后端使用自签名证书、内网 CA 签发证书或私有根证书,Apache 默认校验失败,导致连接中断。需明确指定信任链:
-
SSLProxyCACertificateFile /path/to/internal-ca-bundle.crt—— 指向包含所有可信根/中间证书的 PEM 文件 - 若用的是系统级 CA 存储(如 CentOS 的
/etc/pki/tls/certs/ca-bundle.crt),可直接引用 - 调试阶段可临时设
SSLProxyVerify none跳过校验(生产环境禁用)
完整 HTTPS 负载均衡配置示例
以下是一个真实可用的 HTTPS 后端集群代理配置(假设两个后端均运行在 8443 端口,由公司内网 CA 签发证书):
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
<virtualhost>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/public.crt
SSLCertificateKeyFile /etc/ssl/private/private.key
SSLCertificateChainFile /etc/ssl/certs/intermediate.crt
SSLProxyEngine on
SSLProxyCACertificateFile /etc/ssl/certs/internal-ca-bundle.crt
SSLProxyVerify require
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
<proxy balancer:>
BalancerMember https://backend1.internal:8443 loadfactor=1
BalancerMember https://backend2.internal:8443 loadfactor=1
ProxySet lbmethod=byrequests
</proxy>
ProxyPreserveHost On
ProxyPass /api/ balancer://myapi/
ProxyPassReverse /api/ balancer://myapi/
RequestHeader set X-Forwarded-Proto "https"
</virtualhost>
说明:
-
SSLProxyCheckPeerCN off和SSLProxyCheckPeerName off是为了兼容内部域名与证书 Subject 不严格匹配的情况(如用 IP 或非标准 DNS 名访问后端);若后端证书域名精确匹配(如backend1.internal),建议保留默认校验 -
ProxyPreserveHost On确保后端收到原始 Host 头,避免路由或鉴权异常 -
RequestHeader set X-Forwarded-Proto "https"告知后端原始请求协议,便于生成正确跳转链接或安全策略判断
额外注意事项
HTTPS 后端负载均衡比 HTTP 更敏感,还需检查:
- 确保
mod_ssl、mod_proxy、mod_proxy_balancer、mod_proxy_http全部已启用(Ubuntu 用a2enmod,CentOS 检查httpd.conf中的LoadModule行) - 后端服务器必须监听 HTTPS(即 443 或其他 TLS 端口),且能正常响应 TLS 握手;可用
openssl s_client -connect backend1.internal:8443单独测试 - 防火墙需放行 Apache 主机到各后端的对应 TLS 端口(如 8443)
- 若需将客户端证书透传给后端,还需配置
SSLProxyMachineCertificateFile和密钥










