Apache2错误匹配虚拟主机

问题描述:

我有一个虚拟主机的小问题。Apache2错误匹配虚拟主机

我的配置如:

<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 - OK(匹配的虚拟主机与/var/www/domains/site1.com的DocumentRoot)

http://www.site2.com - OK(匹配的虚拟主机与/var/www/domains/site2.com的DocumentRoot)

但是当我尝试site2.com以https protoco (https://www.site2.com)。 Apache使用/var/www/domains/site1.com DocumentRoot发现错误的Vhost ..

为什么?

感谢您的帮助。

这是因为您只有为site1配置HTTPS而不是site2。

你需要复制site1的虚拟主机配置和应用站点2的信息,以便它会看起来像下面这样:

<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

这简直是虚拟主机在Apache中是如何工作的。首先检查TCP层IP:PORT组合的匹配。如果存在多个具有“最佳匹配”的虚拟主机,则会检查主机名(来自HTTP主机:标头)。

在你的简单情况下,这意味着在端口443上的请求的最佳匹配是单个*:443虚拟主机。它永远不会看比较差的匹配来找到匹配的主机名。