Apache2 不匹配的虚拟主机

Apache2 bad matching 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 - OK(匹配 VHost 与 /var/www/domains/site1.com DocumentRoot)

http://www.site2.com - OK(匹配 Vhost 与 /var/www/domains/site2.com DocumentRoot)

但是当我尝试 site2.com 使用 https 协议时 (https://www.site2.com)。 Apache 发现错误的虚拟主机 /var/www/domains/site1.com DocumentRoot..

为什么?

感谢您的帮助。

这是因为您只为 site1 配置了 HTTPS,而没有为 site2 配置。

您需要复制 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 证书,或者只是在测试。

您可能还会 运行 遇到在您的服务器上仅使用一个 IP 地址的情况下通过 HTTPS 托管多个域的问题,您应该按照此处的说明进行操作:http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI

这就是虚拟主机在 Apache 中的工作方式。首先检查 TCP 层 IP:PORT 组合的匹配。如果有多个带有 "best match" 的虚拟主机,则会检查主机名(来自 HTTP 主机:header)。

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