我在名为virtualhosts.conf的文件中定义了2个站点,该文件加载在httpd.conf的末尾。

它们都具有以下格式:

<VirtualHost IP:80>
  DocumentRoot D:/Site/A/
  ...
</VirtualHost>

<VirtualHost IP:443>
  DocumentRoot D:/Site/A/
  ...
</VirtualHost>

<VirtualHost IP__2:80>
  DocumentRoot D:/Site/B/
  ...
</VirtualHost>

<VirtualHost IP__2:443>
  DocumentRoot D:/Site/B/
  ...
</VirtualHost>


如果我使用上述配置加载https://sitea.com,则加载就很好。如果我使用上述配置加载https://siteb.com,它会中断,表示siteb将自己标识为sitea。如果我翻转条目的顺序:

<VirtualHost IP__2:80>
  DocumentRoot D:/Site/B/
  ...
</VirtualHost>

<VirtualHost IP__2:443>
  DocumentRoot D:/Site/B/
  ...
</VirtualHost>

<VirtualHost IP:80>
  DocumentRoot D:/Site/A/
  ...
</VirtualHost>

<VirtualHost IP:443>
  DocumentRoot D:/Site/A/
  ...
</VirtualHost>


现在,siteb加载正常,但是sitea抛出一个错误,表明自己将自己标识为siteb。

到底是怎么回事?似乎Apache缺省为文件中的“ top”条目,即使两者似乎都对它们的域有效(如果它们是第一个)。

编辑:我的httpd.conf的顶部:

Listen 80
Listen 443

NameVirtualHost IP.50:80
NameVirtualHost IP.50:443

NameVirtualHost IP.51:80
NameVirtualHost IP.51:443

NameVirtualHost IP.52:80
NameVirtualHost IP.52:443

NameVirtualHost IP.53:80
NameVirtualHost IP.53:443

NameVirtualHost IP.54:80
NameVirtualHost IP.54:443

NameVirtualHost IP.55:80
NameVirtualHost IP.55:443

NameVirtualHost IP.56:80
NameVirtualHost IP.56:443

最佳答案

SSL是在HTTP请求之前建立的,并且服务器在收到请求时不知道要提供谁的证书。除了为每个安全域提供专用IP之外,此问题没有通用解决方案。顺便说一句,您的问题在StackOverflow上是题外话。

10-06 12:17