必须启用SSLProxyEngine on,否则Apache无法作为HTTPS客户端连接后端,必然报502或SSL handshake failed;该指令须置于或块内,配合SSLProxyCACertificateFile、SSLProxyVerify require及ProxyPreserveHost on等实现全链路HTTPS透传。

要让 Apache 作为 HTTPS 客户端去安全连接后端服务,必须启用 SSLProxyEngine on。它和对外提供 HTTPS 的 SSLEngine on 完全无关——不配这个,哪怕 ProxyPass 指向 https://backend:8443,也会报 502 或日志里反复出现 SSL handshake failed。
必须开启 SSLProxyEngine 并放在正确位置
该指令只在 <virtualhost></virtualhost> 或 <location></location> 块内生效。写在全局配置(如 httpd.conf 顶部)中无效。典型错误是:Apache 尝试用明文 TCP 连后端 443 端口,但对方期待 TLS 握手,直接失败。
- 确保已加载
mod_ssl和mod_proxy_https - 在 HTTPS 虚拟主机块内添加:
SSLProxyEngine on - 若代理目标是
https://地址,此步不可跳过
信任后端证书:指定 CA 根证书文件
后端若用自签名证书、私有 CA 或中间链不全(如内网 K8s Ingress、测试环境),Apache 默认不信任,必须显式指定信任锚点。
- 用
SSLProxyCACertificateFile /etc/ssl/certs/internal-ca-bundle.crt指向 PEM 格式证书包 - 文件需包含根证书 + 所有中间证书,顺序不能错
- 生产环境务必设
SSLProxyVerify require,禁用none
保持请求上下文完整
全链路加密不只是加 TLS,还要确保业务逻辑不被破坏。
- 加
ProxyPreserveHost on:让后端收到原始 Host 头(如api.example.com),而非后端地址 - 透传协议信息:
RequestHeader set X-Forwarded-Proto "https" env=HTTPS - 如需双向认证(mTLS),再配
SSLProxyMachineCertificateFile /path/to/client.pem(含证书+私钥)
一个最小可用配置示例
将 /api/ 代理至内网 https://backend.internal:8443,后端证书由公司私有 CA 签发:
<virtualhost>
ServerName app.example.com
SSLEngine on
# ... 此处为你的对外 HTTPS 配置(证书、密钥等)
<pre class="brush:php;toolbar:false;">ProxyRequests Off
SSLProxyEngine on
SSLProxyCACertificateFile /etc/ssl/certs/internal-ca-bundle.crt
SSLProxyVerify require
ProxyPreserveHost on
ProxyPass /api/ https://backend.internal:8443/
ProxyPassReverse /api/ https://backend.internal:8443/











