![Apache 远程代理的反向代理 SNI 不匹配](https://linux22.com/image/687849/Apache%20%E8%BF%9C%E7%A8%8B%E4%BB%A3%E7%90%86%E7%9A%84%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%20SNI%20%E4%B8%8D%E5%8C%B9%E9%85%8D.png)
我们在设置 Apache-2.2 和通过另一台设备代理的反向代理时遇到了问题。
流程是:Apache A -> proxy.abc.net -> Apache B
我们在 Apache B 上得到的错误是
通过 SNI 提供的主机名 proxy.abc.net 和通过 HTTP 提供的主机名 backend.abc.net 不同
当前配置
<VirtualHost frontend.abc.com:80>
ServerName frontend.abc.com
SSLEngine on
SSLOptions +StrictRequire
SSLProtocol -all +TLSv1
SSLHonorCipherOrder On
SSLCipherSuite RC4-SHA:HIGH:!ADH:!MD5
SSLCertificateFile conf/certs/cert.cer
SSLProxyCACertificateFile certs/proxy.cer
SSLCertificateKeyFile conf/certs/cert.pem
SSLCertificateChainFile conf/certs/chain.cer
DocumentRoot /foo/bar
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost off
ProxyErrorOverride On
SetEnv proxy-sendchunked 1
ProxyRemote "*" https://proxy.abc.net:8080
ProxyPass /foo https://backend.abc.net:8888/foo disablereuse=on
</Virtual Host>
添加
SSLProxyProtocol SSLv3
它可以工作,因为它不进行 SNI 检查,但是 SSLv3 不是一个选项,我们需要使用 TLSv1 或更高版本。
答案1
Apache 2.2 已对此检查进行硬编码(比较 SNI 主机名和 Host 主机名)。
Apache 2.4 放宽了此条件,仅当满足以下条件时才会失败:
* The request does not select the virtual host that was
* selected by the SNI and its SSL parameters are different
所以答案是升级到2.4。