我们有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 回答
根据Apache维基上的article,您无法为SSL配置命名虚拟主机 . 问题是要确定必须引用哪个虚拟主机,您必须具有来自HTTP请求的"Host"标头的内容 . 但是,如果是SSL,您的请求是加密的,因此您没有该信息 . 这就是依赖IP(或接口)地址(基于IP的虚拟主机)执行虚拟主机匹配的原因 .
虽然,好的是你可能有多个虚拟主机(当然是IP地址)以防你的子域是同一个域(就像在文章的例子中一样,one.example.com,两个 . example.com等) .
事实证明,VirtualHost指令需要使用内部网络IP地址属性 . 所以
一定是
或者内部网络IP地址 .
我曾尝试使用公共IP地址,这导致Apache在启动时失败 . 因此,公共IP将不起作用,但网络IP将 .