我正在从 Virtualhost 加载我的通配符子域的 SSL 文件,但是第二个虚拟主机加载了第一个虚拟主机的 ssl 文件,并且浏览器报告 Invalid certificate 错误
这是配置
<VirtualHost *:443>
ServerName cert-1.domain.com
ServerAlias cert-1.domain.com,*.net.domain.com
DocumentRoot /home/myuser/public_html
ServerAdmin [email protected]
UseCanonicalName Off
<IfModule mod_suphp.c>
suPHP_UserGroup myuser myuser
</IfModule>
<IfModule suexec_module>
<IfModule !mod_ruid2.c>
SuexecUserGroup myuser myuser
</IfModule>
</IfModule>
<IfModule ssl_module>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/cert-1.domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/cert-1.domain.com/privkey.pem
</IfModule>
</VirtualHost>
<VirtualHost *:443>
ServerName cert-2.domain.com
ServerAlias cert-2.domain.com,*.org.domain.com
DocumentRoot /home/myuser/public_html
ServerAdmin [email protected]
UseCanonicalName Off
<IfModule mod_suphp.c>
suPHP_UserGroup myuser myuser
</IfModule>
<IfModule suexec_module>
<IfModule !mod_ruid2.c>
SuexecUserGroup myuser myuser
</IfModule>
</IfModule>
<IfModule ssl_module>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/cert-2.domain.com-2/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/cert-2.domain.com-2/privkey.pem
</IfModule>
</VirtualHost>
但是当我访问anything.org.domain.com 时,它会加载第一个虚拟主机的SSL 文件,而不是第二个虚拟主机的SSL 文件,
即使我尝试了不在第一个或第二个虚拟主机中的子域,它仍然会加载第一个虚拟主机 SSL 文件,并且浏览器会抛出 Invalid SSL 错误。
我该如何解决这个问题,
谢谢
服务器别名应该用空格而不是逗号分隔,所以你的
ServerAlias
行应该是这样的:请注意,
ServerAlias
可以在单个块中给出更多指令,这使得配置在有许多别名的情况下更具可读性。如果您请求一个不存在显式配置的主机,Apache 会为它找到的第一个块提供服务(这就是为什么最好在 las 位置包含一个
VirtualHost
块ServerAlias *
,以拥有一个“包罗万象”的站点)。因此,在您的情况下,所有
ServerAlias
行都不起作用(无论如何都不是您所期望的),因为您正在为具有“cert-2.domain.com,*.org.domain.com”的服务器定义别名名称,逗号,星号和所有。为此,当您询问“anything.org.domain.com”时,Apache 会提供它遇到的第一个块,因为该主机名未在配置中定义。