虚拟主机有点问题。
我的配置是:
<VirtualHost *:80>
ServerName www.site2.com
DocumentRoot /var/www/domains/site2.com
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /var/www/domains/site1.com
ServerName www.site1.com
SSLEngine on
SSLCertificateKeyFile /etc/apache2/ssl/....
SSLCertificateFile /etc/apache2/ssl/...
SSLCertificateChainFile /etc/apache2/ssl/...
</VirtualHost>
如果您在浏览器中输入以下网址:
https://www.site1.com - 确定(将VHost与/var/www/domains/site1.com DocumentRoot匹配)
http://www.site2.com - 确定(将Vhost与/var/www/domains/site2.com DocumentRoot匹配)
但是当我尝试使用https协议(https://www.site2.com)的site2.com时。 Apache发现错误的Vhost与/var/www/domains/site1.com DocumentRoot ..
为什么?
感谢您的帮助。
答案 0 :(得分:0)
这是因为您只为site1而不是site2配置了HTTPS。
您需要复制site1 VirtualHost配置并将site2的信息应用到它,以便它看起来像下面的那样:
<VirtualHost *:80>
ServerName www.site2.com
DocumentRoot /var/www/domains/site2.com
</VirtualHost>
<VirtualHost *:443>
ServerName www.site2.com
DocumentRoot /var/www/domains/site2.com
SSLEngine on
SSLCertificateKeyFile /etc/apache2/ssl/....
SSLCertificateFile /etc/apache2/ssl/...
SSLCertificateChainFile /etc/apache2/ssl/...
</VirtualHost>
<VirtualHost *:443>
ServerName www.site1.com
DocumentRoot /var/www/domains/site1.com
SSLEngine on
SSLCertificateKeyFile /etc/apache2/ssl/....
SSLCertificateFile /etc/apache2/ssl/...
SSLCertificateChainFile /etc/apache2/ssl/...
</VirtualHost>
我假设您的其他网站有单独的SSL证书,或者只是在测试。
您可能还遇到了使用HTTPS托管多个域的问题,您的服务器上只有一个IP地址,您应该按照此处的说明进行操作:http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
答案 1 :(得分:0)
这就是虚拟主机在Apache中的工作方式。首先检查TCP层上IP:PORT组合的匹配。如果有多个虚拟主机具有&#34;最佳匹配&#34;,则会检查主机名(来自HTTP主机:标头)。
在您的简单情况下,这意味着端口443上的请求的最佳匹配是单个*:443 vhost。它永远不会寻找更糟糕的匹配来找到匹配的主机名。