Apache2坏匹配虚拟主机

时间:2015-12-21 20:08:46

标签: apache2 virtualhost

虚拟主机有点问题。

我的配置是:

<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 ..

为什么?

感谢您的帮助。

2 个答案:

答案 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。它永远不会寻找更糟糕的匹配来找到匹配的主机名。