我们有一台运行 Apache 2.2.14 的 Ubuntu 10.04 服务器,带有 4 个基于 IP 的虚拟主机。我们有 2 个 IP 地址,每个 IP 地址都有一个 SSL 证书。例如:
<VirtualHost 1.1.1.1:80>
<VirtualHost 1.1.1.1:443> -> SSL 1
<VirtualHost 2.2.2.2:80>
<VirtualHost 2.2.2.2:4443> -> SSL 2
无论我们做什么,出于某种原因,Apache 在提供 https 请求时总是会找到包含的第一个虚拟主机,但找不到第二个虚拟主机。这导致 apache 从包含的第一个 vhost 为两个 ipaddress 提供 ssl 证书。这是一个非常不理想的结果。
所有的ip地址配置都是正确的。运行apache2ctl -S
说所有配置都是正确的。
我们不使用任何基于名称的虚拟主机。
无论首先包含哪个 :443 vhost,apache 都只会提供来自第一个包含的 vhost 的证书。
据我们了解,如果 apache 没有找到针对 ip 地址:端口的虚拟主机,它将默认使用它找到的第一个 vhost 作为默认值。
为什么会发生这种情况?
答案1
看起来 Apache2 要求ServerName
所有 s 都使用这个指令<VirtualHost>
。我们的两个 SSL 虚拟主机最终具有相同的 IP 地址ServerName
,并且其中一个最终会成为两个 IP 地址的默认地址。