我在名为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上是题外话。