我们拥有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指令中指定的目录吗?
谢谢。
答案 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将会发挥作用。