我在一个名为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默认为文件中的“顶部”条目,即使它们的域名似乎都是有效的,如果它们是第一个。
编辑:我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
答案 0 :(得分:1)
SSL是在HTTP请求之前建立的,并且服务器在收到请求时不知道要提供的证书。除了为每个安全域设置专用IP之外,此问题没有通用解决方案。而且你的问题在StackOverflow上是偏离主题的。