是否可以从 HTTP_HOST(或类似的东西)为 SSLCertificateFile 生成一个变量?

是否可以从 HTTP_HOST(或类似的东西)为 SSLCertificateFile 生成一个变量?

通常在我的 vhost 块中我会这样做:

Define SITE example.com

SSLCertificateFile /path/to/${SITE}.crt
SSLCertificateKeyFile /path/to/${SITE}.key

我想知道是否可以在 Apache 中创建一个与我的文件名相对应的变量example.com.crtexample.com.key

我认为不是,但值得要求合并我的虚拟主机块。

答案1

对于 Apache,您可以使用mod_macro

首先定义一个 VHost Macro 用于重复配置:

 <Macro VHost $host $port $dir>
  Listen $port
  <VirtualHost *:$port>

    ServerName $host
    DocumentRoot $dir

    <Directory $dir>
      # do something here...
    </Directory>

    # limit access to intranet subdir.
    <Directory $dir/intranet>
      order deny,allow
      deny from all
      allow from 10.0.0.0/8
    </Directory>
  </VirtualHost>
</Macro>

然后您可以使用带有不同参数的 VHost。

Use VHost www.apache.org 80 /projects/apache/web
Use VHost www.perl.com 8080 /projects/perl/web
Use VHost www.ensmp.fr 1234 /projects/mines/web

我有 50 个基于相同 wordpress 代码目录的域名(如 a.com、b.com、c.com、d.com 等)。转换为 https 时,每个域名都有自己的证书和私钥文件。我不想复制、粘贴和更改 VirtualHost 块代码 50 次。

通过 mod_macro,我不需要执行 50 次 VirtualHost 块。我这样做了,这使其更容易。下面的宏包括将 www 重定向到非 www 域名:

<Macro VHost $domain>
<VirtualHost *:443>
    ServerName www.$domain
    Redirect permanent / https://$domain/

    Include /path/to/apache-common-ssl.conf

    SSLCertificateFile /etc/pki/tls/certs/$domain.cer
    SSLCertificateKeyFile /etc/pki/tls/private/$domain.key
    SSLCertificateChainFile /etc/pki/tls/certs/$domain-fullchain.cer
</VirtualHost>

<VirtualHost *:443>
    ServerName $domain
    DocumentRoot /home/wordpress
    <Directory /home/wordpress>
        # Stuff about the directory ...
    </Directory>

    Include /path/to/apache-common-ssl.conf

    SSLCertificateFile /etc/pki/tls/certs/$domain.cer
    SSLCertificateKeyFile /etc/pki/tls/private/$domain.key
    SSLCertificateChainFile /etc/pki/tls/certs/$domain-fullchain.cer
</VirtualHost>
</Macro>

Use VHost a.com
Use VHost b.com
Use VHost c.com
......

答案2

Apache 希望在启动时读取证书,因此您无法在运行时(即在握手期间)定义它们。

相关内容