在共享服务器上,我们有一些站点仅在端口 80 上运行。但是,也有一些站点同时在端口 80 和 443 上运行。
例如:
<VirtualHost *:80>
ServerName unsecure.com
</VirtualHost>
<VirtualHost *:80>
ServerName secure.com
RedirectPermanent / https://secure.com
</VirtualHost>
<VirtualHost *:443>
ServerName secure.com
</VirtualHost>
请求https://unsecure.com将会显示 secure.com 的证书。除了分离接口(即 foo:80 和 bar:443,但在这种情况下是不可能的)之外,还有其他方法可以避免这种情况吗?端口 80 上的许多站点都是旧站点,将它们设置为使用 SSL 并不像我们希望的那样简单。
答案1
您不需要单独的网络接口,只需要单独的 IP 地址。使用 https 部署的站点会获得一个 IP 地址,而使用 http 的站点只会获得另一个 IP 地址。当站点迁移到 https 时,其 DNS 地址记录也会更改为另一个 IP 地址。
在 Apache 中,您将更改 Listen 指令以对应这些 IP 地址。例如:
Listen 198.51.100.37 80
Listen 203.0.113.252 80
Listen 203.0.113.252 443
这是唯一可靠的方法。