Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache2错误匹配虚拟主机_Apache2_Virtualhost - Fatal编程技术网

Apache2错误匹配虚拟主机

Apache2错误匹配虚拟主机,apache2,virtualhost,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.c

我对虚拟主机有点问题

我的配置是:

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

服务器名www.site2.com
DocumentRoot/var/www/domains/site2.com
DocumentRoot/var/www/domains/site1.com
服务器名www.site1.com
斯伦金安
SSLCertificateKeyFile/etc/apache2/ssl/。。。。
SSLCertificateFile/etc/apache2/ssl/。。。
SSLCertificateChainFile/etc/apache2/ssl/。。。
如果在浏览器中输入以下URL:

-正常(将VHost与/var/www/domains/site1.com DocumentRoot匹配)

-正常(将Vhost与/var/www/domains/site2.com DocumentRoot匹配)

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

为什么?


感谢您的帮助。

这是因为您只为site1配置了HTTPS,而没有为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>

服务器名www.site2.com
DocumentRoot/var/www/domains/site2.com
服务器名www.site2.com
DocumentRoot/var/www/domains/site2.com
斯伦金安
SSLCertificateKeyFile/etc/apache2/ssl/。。。。
SSLCertificateFile/etc/apache2/ssl/。。。
SSLCertificateChainFile/etc/apache2/ssl/。。。
服务器名www.site1.com
DocumentRoot/var/www/domains/site1.com
斯伦金安
SSLCertificateKeyFile/etc/apache2/ssl/。。。。
SSLCertificateFile/etc/apache2/ssl/。。。
SSLCertificateChainFile/etc/apache2/ssl/。。。
我假设您对其他站点有单独的SSL证书,或者只是在测试


您还可能遇到使用HTTPS托管多个域的问题,在您的服务器上只有一个IP地址,您应该按照此处的说明操作:

这就是虚拟主机在Apache中的工作方式。首先检查TCP层上IP:端口组合的匹配情况。如果有多个虚拟主机具有“最佳匹配”,则会检查主机名(来自HTTP Host:header)

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