Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
Apache ssl裸域找不到VirtualHost_Apache_Ssl - Fatal编程技术网

Apache ssl裸域找不到VirtualHost

Apache ssl裸域找不到VirtualHost,apache,ssl,Apache,Ssl,我们有4个SAN的UC证书。其中一个SAN是裸域名,即domain.com 我们的ssl工作正常,指向每个SAN的正确虚拟主机目录,主域名或裸域名除外。出于某种我无法理解的原因,当请求裸域时,Apache正在从主httpd.conf文件中提供默认DocumentRoot 我们正在Linux中运行Apache2.4。 httpd.conf文件包括conf.d/目录中的*.conf文件 我们创建了一个名为virtual.conf的文件,内容如下: <VirtualHost *:80>

我们有4个SAN的UC证书。其中一个SAN是裸域名,即domain.com

我们的ssl工作正常,指向每个SAN的正确虚拟主机目录,主域名或裸域名除外。出于某种我无法理解的原因,当请求裸域时,Apache正在从主httpd.conf文件中提供默认DocumentRoot

我们正在Linux中运行Apache2.4。 httpd.conf文件包括conf.d/目录中的*.conf文件

我们创建了一个名为virtual.conf的文件,内容如下:

 <VirtualHost *:80>
    DocumentRoot    /data/www/html/domain/public
    ServerName      domain.com
    ServerAlias     *.domain.com
    SetEnv ZF2_PATH "/data/www/html/zf2/library"

    <Directory      /data/www/html/domain/public >
            DirectoryIndex  index.php
            AllowOverride   All
            Order           allow,deny
            Allow           from all
    </Directory>
 </VirtualHost>

 <VirtualHost *:443>
    DocumentRoot    /data/www/html/domain/public
    ServerName      domain.com
    SetEnv ZF2_PATH "/data/www/html/zf2/library"

    SSLEngine               on
    SSLCertificateFile      /etc/pki/tls/certs/domain_com.crt
    SSLCertificateKeyFile   /etc/pki/tls/private/leaders.key

    <Directory      /data/www/html/domain/public >
            DirectoryIndex  index.php
            AllowOverride   All
            Order           allow,deny
            Allow           from all
            Require all granted
    </Directory>
 </VirtualHost>

 <VirtualHost *:443>
    DocumentRoot    /data/www/html/domain/public
    ServerName      va.domain.com
    SetEnv ZF2_PATH "/data/www/html/zf2/library"

    SSLEngine               on
    SSLCertificateFile      /etc/pki/tls/certs/domain_com.crt
    SSLCertificateKeyFile   /etc/pki/tls/private/leaders.key
    <Directory      /data/www/html/domain/public >
            DirectoryIndex  index.php
            AllowOverride   All
            Order           allow,deny
            Allow           from all
            Require all granted
    </Directory>
 </VirtualHost>

DocumentRoot/data/www/html/domain/public
ServerName域名.com
ServerAlias*.domain.com
SetEnv ZF2_PATH“/data/www/html/ZF2/library”
DirectoryIndex.php
允许超越所有
命令允许,拒绝
通融
DocumentRoot/data/www/html/domain/public
ServerName域名.com
SetEnv ZF2_PATH“/data/www/html/ZF2/library”
斯伦金安
SSLCertificateFile/etc/pki/tls/certs/domain\u com.crt
SSLCertificateKeyFile/etc/pki/tls/private/leaders.key
DirectoryIndex.php
允许超越所有
命令允许,拒绝
通融
要求所有授权
DocumentRoot/data/www/html/domain/public
ServerName va.domain.com
SetEnv ZF2_PATH“/data/www/html/ZF2/library”
斯伦金安
SSLCertificateFile/etc/pki/tls/certs/domain\u com.crt
SSLCertificateKeyFile/etc/pki/tls/private/leaders.key
DirectoryIndex.php
允许超越所有
命令允许,拒绝
通融
要求所有授权
目前,每个虚拟主机都指向服务器上的同一文件夹

有人知道为什么调用会导致Apache提供默认DocumentRoot位置(位于httpd.conf中)而不是此VirtualHost指令中指定的目录吗


谢谢。

事实证明,VirtualHost指令要求使用内部网络IP地址属性。所以

 <VirtualHost *:443> 

一定是

 <VirtualHost 10.10.10.10:443> 

或者无论内部网络IP地址是什么

我曾尝试使用公共IP地址,这导致Apache在启动时失败。因此,公共IP不起作用,但网络IP会起作用。

根据Apache的wiki上的一篇文章,您无法为SSL配置命名虚拟主机。问题在于,要确定必须引用哪个虚拟主机,必须从HTTP请求中获取“主机”头的内容。但是,在SSL的情况下,您的请求是加密的,因此您没有该信息。这就是为什么根据IP(或接口)地址(基于IP的虚拟主机)执行虚拟主机匹配

不过,如果您的子域属于同一个域(如本文示例中的one.example.com、two.example.com等),那么您可能有多个虚拟主机(当然有IP地址)