我有一个frontend.example.com
具有公共 IP 的服务器。它是 Apache (2.4) 应该代理来自service1.example.com
(DNS 别名frontend.example.com
)的流量。
service1.example.com
192.168.56.0
是两者之间的专用 LAN ( ) 上的 VM 。
现在,这对 HTTP 来说很容易:
<VirtualHost *:80>
ServerName service1.example.com
ProxyPass / http://192.168.56.2/
ProxyPassReverse / http://192.168.56.2/
<Location "/">
Require all granted
</Location>
</VirtualHost>
我正在尝试对 HTTPS 做同样的事情:
<VirtualHost *:443>
ServerName service1.example.com
SSLEngine On
SSLProxyEngine On
ProxyRequests Off
SSLProxyCheckPeerCN off
SSLProxyCheckPeerExpire off
SSLInsecureRenegotiation on
SSLProxyVerify none
SSLVerifyClient none
SSLCertificateFile /etc/ssl/certs/example_com.crt
SSLCertificateKeyFile /etc/ssl/certs/example_com.key
ProxyPass / https://192.168.56.2/
ProxyPassReverse / https://192.168.56.2/
<Location "/">
Require all granted
</Location>
</VirtualHost>
尝试service1.example.com
通过 HTTPS 访问返回:与远程服务器进行 SSL 握手期间出错
安全不是我关心的问题。service1
需要与其某些服务建立 HTTPS 连接,这就是为什么我不只是将 HTTPS 代理到 HTTP。我不想frontend.example.com
参与 SSL。我想要的是它说“嘿,我在 443 上有一个连接,我不处理它,我只是将它转发到这个内部 IP,它会处理它”。我只是想让它传递请求。可以这样做吗?
正如您在上面的 HTTPS 配置中所看到的,我已经尝试尽可能地放松安全性(例如SSLInsecureRenegotiation on
,假设降低了对中间人攻击的防护墙,不是吗?)。但到目前为止没有任何效果。
显然我缺少的唯一指令是
SSLProxyCheckPeerName off
. 现在它起作用了。