首页 文章

Apache ssl Naked Domain没有找到VirtualHost

提问于
浏览
-1

我们有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 回答

  • 1

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

    虽然,好的是你可能有多个虚拟主机(当然是IP地址)以防你的子域是同一个域(就像在文章的例子中一样,one.example.com,两个 . example.com等) .

  • 0

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

    <VirtualHost *:443>
    

    一定是

    <VirtualHost 10.10.10.10:443>
    

    或者内部网络IP地址 .

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

相关问题