Apache ssl Naked Domain没有找到VirtualHost

时间:2014-02-27 23:07:38

标签: apache ssl

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

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

我们在Linux中运行Apache 2.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>

目前,我们让每个虚拟主机指向服务器上的同一个文件夹。

有人可以看到为什么调用https://domain.com会导致Apache提供默认的DocumentRoot位置(位于httpd.conf)而不是VirtualHost指令中指定的目录吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

根据Apache的wiki article,您无法为SSL配置命名虚拟主机。问题是,要确定必须引用哪个虚拟主机,您必须具有&#34;主机&#34;的内容。来自HTTP请求的标头。但是,如果是SSL,您的请求是加密的,因此您没有该信息。这就是依赖IP(或接口)地址(基于IP的虚拟主机)执行虚拟主机匹配的原因。

虽然好的是你可能有多个虚拟主机(当然是IP地址),以防你的子域名属于同一个域(就像文章的例子中所示,one.example.com) ,two.example.com等。)。

答案 1 :(得分:0)

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

 <VirtualHost *:443> 

必须是

 <VirtualHost 10.10.10.10:443> 

或内部网络IP地址。

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