我在同一台服务器上为多个虚拟主机设置了工作设置,但存在一个问题:每当添加虚拟主机时,所有服务器的 SSL 证书都会不必要地更新和移动。
在这种设置中,每个 vhost 都有一个单独的.conf
文件,并且主机是单独启用的a2ensite
。
对于 2 个站点,这看起来像:
MDomain foo.com
MDStoreDir /var/apache-md/foo.com
<VirtualHost *:443>
ServerName foo.com
DocumentRoot /var/www1
...
</VirtualHost>
和:
MDomain bar.com
MDStoreDir /var/apache-md/bar.com
<VirtualHost *:443>
ServerName bar.com
DocumentRoot /var/www2
...
</VirtualHost>
当我启用foo.com
并重新加载 Apache 时,我会在 中获得证书/var/apache-md/foo.com/domains/foo.com/pubcert.pem
。到目前为止一切顺利。但是当我稍后启用 时bar.com
,我现在会得到2新的证书集,最终得到:
/var/apache-md/foo.com/domains/foo.com/pubcert.pem
/var/apache-md/bar.com/domains/foo.com/pubcert.pem
/var/apache-md/bar.com/domains/bar.com/pubcert.pem
如果我跑
$ openssl s_client -connect foo.com:443 -prexit
我发现 Apache 现在为 提供证书 2 foo.com
,而不是证书 1。这显然不是一个好方法:似乎每次我添加虚拟主机时,所有证书都会更新,并全部存储在最后添加的主机的位置。
我也尝试过将所有主机设置MDStoreDir
为相同的位置 ( /var/apache-md
),但无法使其正常工作。 mod_md
似乎要检查此目录是否存在。如果已经存在,则不会获得新证书。关于如何最好地做到这一点,有什么想法吗?
不知道mod_md
我使用的是哪个版本;似乎没有办法找出答案。它是相当新的版本(Ubunut 22.04 上的 Apache 2.4.52)。
答案1
MDStoreDir 是服务器上下文设置。这意味着它是一个每个 apache.conf 存在一次的全局设置。当您尝试为第二个 vhost 唯一地设置它时,它会覆盖先前的声明。