通常在我的 vhost 块中我会这样做:
Define SITE example.com
SSLCertificateFile /path/to/${SITE}.crt
SSLCertificateKeyFile /path/to/${SITE}.key
我想知道是否可以在 Apache 中创建一个与我的文件名相对应的变量example.com.crt
?example.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 希望在启动时读取证书,因此您无法在运行时(即在握手期间)定义它们。